线程池的拒绝策略

2022-05-13 12:29:16 浏览数 (1)

什么是线程池的拒绝策略?

拒绝策略,表示当队列满了并且工作线程大于等于线程池的最大线程数(maximumPoolSize)线程池会按照设定的拒绝策略(四种)拒绝.

什么时候用?

等待队列也已经排满了,再也塞不下新任务了同时,线程池中的max线程也达到了,无法继续为新任务服务。这时候我们就需要拒绝策略机制合理的处理这个问题。

线程池的四种拒绝策略
  • AbortPolicy(默认):直接抛出RejectedExecutionException异常阻止系统正常运行。
  • CallerRunsPolicy:“调用者运行“一种调节机制,该策略既不会抛弃任务,也不会抛出异常,而是将某些任务回退到调用者,让调用者去处理,比如main调用了线程池,线程池处理不了就让main慢慢处理去,从而降低新任务的流量
  • DiscardOldestPolicy:抛弃队列中等待最久的任务,然后把当前任务加入队列中尝试再次提交当前任务。
  • DiscardPolicy:直接丢弃任务,不予任何处理也不抛出异常。如果允许任务丢失,这是最好的一种方案。

三四方案皆会出现丢任务情况

0 人点赞