1. RUNNING
- 狀態(tài)說明:線程池處在RUNNING狀態(tài)時,能夠接收新任務(wù),以及對已添加的任務(wù)進行處理男图。
- 狀態(tài)切換:線程池的初始化狀態(tài)是RUNNING锰霜。換句話說筹误,線程池被一旦被創(chuàng)建,就處于RUNNING狀態(tài)癣缅!
道理很簡單厨剪,在ctl的初始化代碼中,就將它初始化為RUNNING狀態(tài)友存,并且"任務(wù)數(shù)量"初始化為0祷膳。
2. SHUTDOWN
- 狀態(tài)說明:線程池處在SHUTDOWN狀態(tài)時,不接收新任務(wù)屡立,但能處理阻塞隊列中的任務(wù)直晨。
- 狀態(tài)切換:調(diào)用線程池的shutdown()接口時,線程池由RUNNING -> SHUTDOWN。
3. STOP
- 狀態(tài)說明:線程池處在STOP狀態(tài)時勇皇,不接收新任務(wù)罩句,不處理阻塞隊列中任務(wù),并且會中斷正在處理的任務(wù)敛摘。
- 狀態(tài)切換:調(diào)用線程池的shutdownNow()接口時门烂,線程池由(RUNNING or SHUTDOWN ) -> STOP。
4. TIDYING
- 狀態(tài)說明:當所有的任務(wù)已終止兄淫,ctl記錄的"任務(wù)數(shù)量"為0屯远,線程池會變?yōu)門IDYING狀態(tài)。當線程池變?yōu)門IDYING狀態(tài)時捕虽,會執(zhí)行鉤子函數(shù)terminated()慨丐。terminated()在ThreadPoolExecutor類中是空的,若用戶想在線程池變?yōu)門IDYING時薯鳍,進行相應(yīng)的處理咖气;可以通過重載terminated()函數(shù)來實現(xiàn)。
- 狀態(tài)切換:當線程池在SHUTDOWN狀態(tài)下挖滤,阻塞隊列為空并且線程池中沒有正在執(zhí)行的任務(wù)時崩溪,就會由 SHUTDOWN -> TIDYING。
當線程池在STOP狀態(tài)下斩松,線程池中沒有正在執(zhí)行的任務(wù)時伶唯,就會由STOP -> TIDYING。
5. TERMINATED
- 狀態(tài)說明:線程池徹底終止惧盹,就變成TERMINATED狀態(tài)乳幸。
- 狀態(tài)切換:線程池處在TIDYING狀態(tài)時,執(zhí)行完terminated()之后钧椰,就會由 TIDYING -> TERMINATED粹断。