推薦:Java并發程式設計彙總
Java并發程式設計一線程池的五種狀态
原文位址
Java多線程線程池(4)–線程池的五種狀态
正文
線程池的5種狀态:
Running
、
ShutDown
、
Stop
、
Tidying
、
Terminated
。
線程池各個狀态切換架構圖:
RUNNING
- 狀态說明:線程池處在
狀态時,能夠接收新任務(線程池沒有滿的情況下),以及對已添加的任務進行處理。RUNNING
- 狀态切換:線程池的初始化狀态是
。換句話說,線程池一旦被建立,就處于RUNNING
狀态,并且線程池中的任務數為RUNNING
。0
private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));
SHUTDOWN
- 狀态說明:線程池處在
狀态時,不接收新任務,但能處理已添加的任務。SHUTDOWN
- 狀态切換:調用線程池的
接口時,線程池由shutdown()
-> RUNNING
。SHUTDOWN
STOP
- 狀态說明:線程池處在
狀态時,不接收新任務,不處理已添加的任務,并且會中斷正在處理的任務。STOP
- 狀态切換:調用線程池的
接口時,線程池由(shutdownNow()
or RUNNING
) -> SHUTDOWN
。STOP
- 狀态說明:當所有的任務已終止,
記錄的ctl
為任務數量
,線程池會變為0
狀态。當線程池變為TIDYING
狀态時,會執行鈎子函數TIDYING
。terminated()
在terminated()
類中是空的,若使用者想線上程池變為ThreadPoolExecutor
時,進行相應的處理;可以通過重載TIDYING
函數來實作。terminated()
- 狀态切換:當線程池在
狀态下,阻塞隊列(任務隊列)為空并且線程池中執行的任務也為空時,就會由 SHUTDOWN
->SHUTDOWN
。 當線程池在TIDYING
狀态下,線程池中執行的任務為空時,就會由STOP
-> STOP
。TIDYING
- 狀态說明:線程池徹底終止,就變成
狀态。TERMINATED
- 狀态切換:線程池處在
狀态時,執行完TIDYING
之後,就會由 terminated()
-> TIDYING
。TERMINATED