线程池拒绝策略是什么?线程池拒绝策略详解

TheDisguiser 2020-04-15 17:54:15 java常见问答 6211

在使用线程池的过程中,有时候会碰到缓存队列已满的尴尬情况,这个时候我们就需要拒绝掉它们,不能继续执行任务了,那该怎么拒绝呢?一起来看看吧。

当线程池任务缓存队列已满且线程池中线程数达到maximumPoolSize时,如果还有任务到来的话就会使用任务拒绝策略。

线程池一共有四种拒绝策略:

1.ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。 2.ThreadPoolExecutor.DiscardPolicy:丢弃任务,但是不抛出异常。

3.ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新提交被拒绝的任务 4.ThreadPoolExecutor.CallerRunsPolicy:调用提交任务的线程处理该任务

下面来看几个例子了解一下它们吧。

AbortPolicy:线程池固定默认拒绝策略,会丢弃任务并抛出RejectedExecutionException异常。

线程池的拒绝策略是什么

结果:AbortPolicy 直接抛出异常。

CallerRunsPolicy:当超过最大线程池数量的时候,调用CallerRunsPolicy会先把阻塞队列里面尾部任务停止

线程池的拒绝策略是什么

DiscardOldestPolicy:当启动DiscardOldestPolicy拒绝策略时,阻塞队列满的时候会直接去掉队尾元素,并将当前任务插入队尾

线程池的拒绝策略是什么

DiscardPolicy:执行DiscardPolicy时只会执行当前线程池和阻塞队列里面的任务,其他的都会被丢弃

线程池的拒绝策略是什么

以上就是本篇文章的所有内容了,想知道更多关于Java一些知识问答的小知识的话,请持续关注本站。