线程池的 5 种状态:Running ShutDown Stop Tidying Terminated
RUNNING
- 线程池处在 RUNNING 状态时,可能接管新工作,以及对已增加的工作进行解决
- 线程池的初始化状态是 RUNNING。换句话说,线程池被一旦被创立,就处于 RUNNING 状态,并且线程池中的工作数为 0
SHUTDOWN
- 线程池处在 SHUTDOWN 状态时,不接管新工作,但能解决已增加的工作
- 调用线程池的 shutdown() 接口时,线程池由 RUNNING > SHUTDOWN
STOP
- 线程池处在 STOP 状态时,不接管新工作,不解决已增加的工作,并且会中断正在解决的工作。
- 调用线程池的 shutdownNow() 接口时,线程池由 RUNNING 或 SHUTDOWN > STOP
TIDYING
- 当所有的工作已终止,ctl 的工作数量为 0,线程池会变为 TIDYING 状态。当线程池变为 TIDYING 状态时,会执行钩子函数 terminated()。terminated() 在 ThreadPoolExecutor 类中是空的,若用户想在线程池变为 TIDYING 时,进行相应的解决;能够通过重载 terminated() 函数来实现
- 当线程池在 SHUTDOWN 状态下,阻塞队列为空并且线程池中执行的工作也为空时,就会由 SHUTDOWN -> TIDYING
- 当线程池在 STOP 状态下,线程池中执行的工作为空时,就会由 STOP > TIDYING
TERMINATED
- 线程池彻底终止,就变成 TERMINATED 状态
- 线程池处在 TIDYING 状态时,执行完 terminated() 之后,就会由 TIDYING > TERMINATED