線程池的五種狀態

原文地址:https://blog.csdn.net/l_kanglin/article/details/57411851java

線程池的5種狀態:Running、ShutDown、Stop、Tidying、Terminated。框架

線程池各個狀態切換框架圖:函數

image

一、RUNNINGspa

(1) 狀態說明:線程池處在RUNNING狀態時,可以接收新任務,以及對已添加的任務進行處理。
(02) 狀態切換:線程池的初始化狀態是RUNNING。換句話說,線程池被一旦被建立,就處於RUNNING狀態,而且線程池中的任務數爲0!.net

private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));
  • 1

二、 SHUTDOWN線程

(1) 狀態說明:線程池處在SHUTDOWN狀態時,不接收新任務,但能處理已添加的任務。
(2) 狀態切換:調用線程池的shutdown()接口時,線程池由RUNNING -> SHUTDOWN。code

三、STOPblog

(1) 狀態說明:線程池處在STOP狀態時,不接收新任務,不處理已添加的任務,而且會中斷正在處理的任務。
(2) 狀態切換:調用線程池的shutdownNow()接口時,線程池由(RUNNING or SHUTDOWN ) -> STOP。接口

四、TIDYING隊列

(1) 狀態說明:當全部的任務已終止,ctl記錄的」任務數量」爲0,線程池會變爲TIDYING狀態。當線程池變爲TIDYING狀態時,會執行鉤子函數terminated()。terminated()在ThreadPoolExecutor類中是空的,若用戶想在線程池變爲TIDYING時,進行相應的處理;能夠經過重載terminated()函數來實現。
(2) 狀態切換:當線程池在SHUTDOWN狀態下,阻塞隊列爲空而且線程池中執行的任務也爲空時,就會由 SHUTDOWN -> TIDYING。
當線程池在STOP狀態下,線程池中執行的任務爲空時,就會由STOP -> TIDYING。

五、 TERMINATED

(1) 狀態說明:線程池完全終止,就變成TERMINATED狀態。 (2) 狀態切換:線程池處在TIDYING狀態時,執行完terminated()以後,就會由 TIDYING -> TERMINATED。

相關文章
相關標籤/搜索