面试题答案
一键面试Java线程池中常见的状态及状态切换
- RUNNING
- 含义:线程池处于运行状态,能够接受新任务并处理队列中的任务。
- 切换条件:创建线程池后,线程池默认处于
RUNNING
状态。
- SHUTDOWN
- 含义:线程池不再接受新任务,但会继续处理工作队列中已有的任务。
- 切换条件:调用
shutdown()
方法后,线程池从RUNNING
状态切换到SHUTDOWN
状态。
- STOP
- 含义:线程池停止接受新任务,并且会中断正在执行的任务,同时丢弃工作队列中的任务。
- 切换条件:调用
shutdownNow()
方法后,线程池从RUNNING
或SHUTDOWN
状态切换到STOP
状态。
- TIDYING
- 含义:所有任务都已终止,工作线程数为0。线程池即将进入
TERMINATED
状态。 - 切换条件:当处于
SHUTDOWN
状态,且工作队列和正在执行的任务都为空时,线程池会进入TIDYING
状态;或者当处于STOP
状态,且正在执行的任务为空时,也会进入TIDYING
状态。
- 含义:所有任务都已终止,工作线程数为0。线程池即将进入
- TERMINATED
- 含义:线程池彻底终止,所有任务都已处理完成。
- 切换条件:在线程池进入
TIDYING
状态后,会执行terminated()
钩子方法,执行完毕后,线程池进入TERMINATED
状态。