线程池的五种状态

线程池的生命周期,总共有五种状态

  • RUNNING :能接受新提交的任务,并且也能处理阻塞队列中的任务;
  • SHUTDOWN:关闭状态,不再接受新提交的任务,但却可以继续处理阻塞队列中已保存的任务。在线程池处于 RUNNING 状态时,调用 shutdown()方法会使线程池进入到该状态。(finalize() 方法在执行过程中也会调用shutdown()方法进入该状态);
  • STOP:不能接受新任务,也不处理队列中的任务,会中断正在处理任务的线程。在线程池处于 RUNNING 或 SHUTDOWN 状态时,调用 shutdownNow() 方法会使线程池进入到该状态;
  • TIDYING:如果所有的任务都已终止了,workerCount (有效线程数) 为0,线程池进入该状态后会调用 terminated() 方法进入TERMINATED 状态。
  • TERMINATED:在terminated() 方法执行完后进入该状态,默认terminated()方法中什么也没有做。

进入TERMINATED的条件如下:线程池不是RUNNING状态;

               线程池状态不是TIDYING状态或TERMINATED状态;

     如果线程池状态是SHUTDOWN并且workerQueue为空;

              workerCount为0;

              设置TIDYING状态成功。

线程池的生命周期流程图

posted @ 2019-10-28 14:15  莫等、闲  阅读(3725)  评论(0编辑  收藏  举报