线程池的状态以及拒绝策略

首先我们回顾一下线程有哪些状态。

线程池的状态以及拒绝策略_第1张图片

线程池的状态有哪些呢?

线程池的5种状态是:Running,SHUTDOWN,STOP,TIDYING,TERMINATED

线程池的状态以及拒绝策略_第2张图片

介绍一下线程池的拒绝策略:

前面已经提到过线程池的四种拒绝策略分别为:

1 AbortPolicy 默认,直接抛异常

2 DiscardPolicy  正常执行不处理

3 DiscardOldestPolicy 将当前任务加入队尾,删除之前队尾线程

4 CallerRunsPolicy 终止正在执行任务,执行当前需要加入的任务

分别给出几个demo:

线程池的状态以及拒绝策略_第3张图片

可以看到采用AbortPolicy  直接抛了异常

线程池的状态以及拒绝策略_第4张图片

可以看到当超过最大线程池数量的时候,调用CallerRunsPolicy的话会先把阻塞队列里面尾部任务停止执行当前任务

线程池的状态以及拒绝策略_第5张图片

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


线程池的状态以及拒绝策略_第6张图片

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

你可能感兴趣的:(线程池的状态以及拒绝策略)