線程池的生命周期,總共有五種狀態
- 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狀態成功。
線程池的生命周期流程圖

