面试题答案
一键面试1. 常见状态
- RUNNING: 线程池处于运行状态,可以接受新任务并处理队列中的任务。
- SHUTDOWN:
不再接受新任务,但会继续处理队列中已有的任务。调用
shutdown()
方法后,线程池进入此状态。 - STOP:
不再接受新任务,也不再处理队列中的任务,并且会中断正在执行的任务。调用
shutdownNow()
方法后,线程池进入此状态。 - TIDYING:
所有任务都已终止,工作线程数为0。当线程池进入
SHUTDOWN
状态且队列和正在执行的任务都为空,或者进入STOP
状态且工作线程数为0时,线程池会转换到此状态。 - TERMINATED:
线程池彻底终止。当线程池进入
TIDYING
状态后,会执行terminated()
钩子方法,执行完毕后,线程池进入TERMINATED
状态。
2. 状态转换
- RUNNING -> SHUTDOWN:
调用
shutdown()
方法,线程池不再接受新任务,但会继续处理队列中的任务。 - RUNNING or SHUTDOWN -> STOP:
调用
shutdownNow()
方法,线程池不再接受新任务,中断正在执行的任务,抛弃队列中的任务。 - SHUTDOWN -> TIDYING:
当线程池处于
SHUTDOWN
状态,且所有任务(包括队列中的任务)都执行完毕,工作线程数为0时,线程池转换到TIDYING
状态。 - STOP -> TIDYING:
当线程池处于
STOP
状态,所有正在执行的任务被中断,工作线程数为0时,线程池转换到TIDYING
状态。 - TIDYING -> TERMINATED:
当线程池进入
TIDYING
状态后,terminated()
钩子方法执行完毕,线程池转换到TERMINATED
状态。