线程池拒绝策略源码小析

2017-11-10  本文已影响0人  zcliu
image.png

下面就分析一下这四种拒绝策略有什么不一样:

AbortPolicy

image.png

可以看到AbortPolicy其实就是直接抛了个exception,并丢弃该task。

DiscardPolicy

image.png

DiscardPolicy什么都没做,静静地丢弃该task

DiscardOldestPolicy

image.png

可以看到DiscardOldestPolicy会先通过poll方法,将任务队列的队头,也就是最旧的那个任务remove掉,然后将最新的task放进线程池

CallerRunsPolicy

image.png

可以看到,CallerRunsPolicy就是直接调用Runnable的实例方法run去执行该task,说白了就是该task直接由调用者线程来执行

后记

当然,以上四种拒绝策略只是jdk预定义的,我们也可以根据实际情况自定义拒绝策略,只需要实现RejectedExecutionHandler接口即可

上一篇 下一篇

猜你喜欢

热点阅读