线程池的生命周期
线程池生命周期包括:
- RUNNING:接收新的任务并处理队列中的任务
- SHUTDOWN:不接收新的任务,但是处理队列中的任务
- STOP:不接收新的任务,不处理队列中的任务,同时中断处理中的任务
- TIDYING:所有的任务处理完成,有效的线程数是0
- TERMINATED:terminated() 方法执行完毕。
生命周期状态和方法对应的关系:
image.png线程池的拒绝策略
如果线程池中所有的线程都在忙碌,并且工作队列也满了(前提是工作队列是有界队列),那么此时提交任务,线程池就会拒绝接收。至于拒绝的策略,你可以通过 handler 这个参数来指定。
ThreadPoolExecutor 已经提供了以下 4 种策略。
- CallerRunsPolicy:提交任务的线程自己去执行该任务。
- AbortPolicy:默认的拒绝策略,会 throws RejectedExecutionException。
- DiscardPolicy:直接丢弃任务,没有任何异常抛出。
- DiscardOldestPolicy:丢弃最老的任务,其实就是把最早进入工作队列的任务丢弃,然后把新任务加入到工作队列。
以上内置拒绝策略均实现了 RejectedExecutionHandler 接口,若以上策略仍无法满足实际需要,完全可以自己扩展 RejectedExecutionHandler 接口。
网友评论