线程池的五种状态
RUNNABLE
<b><u>状态切换:</u></b>线程池的初始化状态是RUNNING。换句话说,线程池被一旦被创建,就处于RUNNING状态,并且线程池中的任务数为0!<br><br>private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));
SHUTDOWN
<b><u>状态切换:</u></b>调用线程池的shutdown()接口时,线程池由RUNNING -> SHUTDOWN。
STOP
<b><u>状态切换:</u></b>调用线程池的shutdown()接口时,线程池由RUNNING -> SHUTDOWN。
TIDYING
<b><u>状态切换:</u></b>当线程池变为TIDYING状态时,会执行钩子函数terminated()。terminated()在ThreadPoolExecutor类中是空的,若用户想在线程池变为TIDYING时,进行相应的处理;<br><br>可以通过重载terminated()函数来实现。
<b><u>状态切换:</u></b>当线程池在SHUTDOWN状态下,阻塞队列为空并且线程池中执行的任务也为空时,就会由 SHUTDOWN -> TIDYING。<br><br>当线程池在STOP状态下,线程池中执行的任务为空时,就会由STOP -> TIDYING。
TERMINATED
<b><u>状态切换:</u></b>线程池处在TIDYING状态时,执行完terminated()之后,就会由 TIDYING -> TERMINATED