线程池生命周期状态
RUNNING
:接收新任务并执行队列中的任务
SHUTDOWN
:不会接收新任务,但会继续处理队列中的任务
STOP
:不接受新任务,不处理队列中的任务,并中断正在进行的任务
TIDYING
:所有的任务都已终止,工作线程数为零,在转为此状态后可以执行一个terminated()的钩子函数
TERMINATED
:terminated()的钩子函数执行完后,转为TERMINATED
状态
常见的线程池种类
常见的线程池 | 特性 | 核心线程 | 最大线程数 | 使用的任务队列 |
---|---|---|---|---|
FixedThreadPool | 定长 | 指定 | 等于核心线程数 | LinkedBlockingQueue |
SingleThreadPool | 单个 | 1 | 1 | LinkedBlockingQueue |
CachedThreadPool | 不定长 | 0 | Integer.MAV_VALUE | SynchronousQueue |
SecudleThreadPool | 周期性 执行任务的线程池 |
指定 | Integer.MAV_VALUE | DelayedWorkQueue |
拒绝任务策略(默认使用的AbortPolicy)
AbortPolicy
: 抛出RejectedExecutionException异常DiscardPolicy
: 什么都不做,不执行,也不抛异常DiscardOldestPolicy
: poll出当前第一个元素,再次执行execute提交任务方法 CallerRunsPolicy
: 直接执行Runnable的run方法