https://www.cnblogs.com/lifegoeson/p/13780720.html

和一个正常的线程的生命周期区别开,这个是线程池里线程的状态。

  1. Running,能接受新任务以及处理已添加的任务;
  2. Shutdown,不接受新任务,可以处理已经添加的任务,也就是不能再调用execute或者submit了;
  3. Stop,不接受新任务,不处理已经添加的任务,并且中断正在处理的任务;
  4. Tidying,所有的任务已经终止,CTL记录的任务数量为0,CTL负责记录线程池的运行状态与活动线程数量;
  5. Terminated,线程池彻底终止,则线程池转变为terminated的状态。

Untitled

如图所示,从running状态转换为 shutdown,调用 shutdown()方法;如果调用shutdownNow()方法,就直接会变成stop。 terminated()是钩子函数,默认是什么也不做的,我们可以重写,然后决定结束之前要做一些别的处理逻辑。这个钩子函数,就是模板模式的方法。

Running

Shutdown

Stop

Tidying

Terminated

【Java面试】说说线程池的五种状态

如何优雅的终止线程池