线程池的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