千鋒教育2023版Java面試寶典Java面試200題(含美團、字節(jié)、阿里大廠真

線程池的5種狀態(tài)分為
Running ,SHUTDOWN,STOP,TIDYING,TERMINATED
1)RUNNING:這是狀態(tài)較為正常的,就緒接受新的一個線程任務(wù),準(zhǔn)備處理等待隊列中的任務(wù)。線程池的初始化狀態(tài)是RUNNING。線程池被一旦被創(chuàng)建,就處于RUNNING狀態(tài),可分為就緒狀態(tài)和運行狀態(tài),并且線程池中的任務(wù)數(shù)初始化為0
2)SHUTDOWN:線程池處于關(guān)閉狀態(tài),不接受新的任務(wù)提交,但是會繼續(xù)處理等待隊列中的任務(wù)。處理完畢為止,調(diào)用線程池的shutdown()方法時,線程池將直接由RUNNING 轉(zhuǎn)變?yōu)?SHUTDOWN。
3)STOP:線程池處于拒絕狀態(tài),不接受新的任務(wù)提交,并且不再處理等待隊列中的任務(wù),中斷正在執(zhí)行任務(wù)的線程。調(diào)用線程池的shutdownNow()方法時,線程池由(RUNNING or SHUTDOWN ) 轉(zhuǎn)變?yōu)?STOP。
4)TIDYING:線程池處于銷毀狀態(tài)了,線程工作數(shù)(workCount) 為 0,線程池的狀態(tài)在轉(zhuǎn)換為 TIDYING 狀態(tài)時,會執(zhí)行鉤子方法 terminated()。因為terminated()在ThreadPoolExecutor類中是空的,所以用戶想在線程池變?yōu)門IDYING時進(jìn)行相應(yīng)的處理;可以通過重載的terminated()函數(shù)來實現(xiàn)。
5)當(dāng)線程池在SHUTDOWN狀態(tài)下,阻塞隊列為空并且線程池中執(zhí)行的任務(wù)也為空時,就會由 SHUTDOWN -> TIDYING。
當(dāng)線程池在STOP狀態(tài)下,線程池中執(zhí)行的任務(wù)為空時,就會由STOP -> TIDYING。
6)TERMINATED:線程池處在TIDYING狀態(tài)時,執(zhí)行完terminated()之后,就會由 TIDYING -> TERMINATED。