首先我們回顧一下線程有哪些狀態。
線程池的狀態有哪些呢?
線程池的5種狀態是:Running,SHUTDOWN,STOP,TIDYING,TERMINATED
介紹一下線程池的拒絕策略:
前面已經提到過線程池的四種拒絕策略分別為:
1 AbortPolicy 默認,直接拋異常
2 DiscardPolicy ?正常執行不處理
3 DiscardOldestPolicy 將當前任務加入隊尾,刪除之前隊尾線程
4 CallerRunsPolicy 終止正在執行任務,執行當前需要加入的任務
分別給出幾個demo:
可以看到采用AbortPolicy ?直接拋了異常
可以看到當超過最大線程池數量的時候,調用CallerRunsPolicy的話會先把阻塞隊列里面尾部任務停止執行當前任務
能看到當啟動DiscardOldestPolicy拒絕策略的時候,阻塞隊列滿的時候會直接去掉隊尾元素,將當前任務插入隊尾
可以看到當執行DiscardPolicy時只會執行當前線程池和阻塞隊列里面的任務,其他的都會被丟棄