如果你提交任務時,線程池隊列已滿,這時會發生什么

有倆種可能:
1、如果使用的是無界隊列 LinkedBlockingQueue,也就是無界隊列的話,沒關系,繼續添加任務到阻塞隊列中等待執行,因為 LinkedBlockingQueue 可以近乎認為是一個無窮大的隊列,可以無限存放任務
2、如果使用的是有界隊列比如 ArrayBlockingQueue,任務首先會被添加到ArrayBlockingQueue中,ArrayBlockingQueue 滿了,會根據maximumPoolSize 的值增加線程數量,如果增加了線程數量還是處理不過來,ArrayBlockingQueue 繼續滿,那么則會使用拒絕策略RejectedExecutionHandler處理滿了的任務,默認是 AbortPolicy

補充:
線程池四大拒絕策略

、AbortPolicy
直接丟棄任務,拋出RejectedExecutionException異常,是默認策略

2、CallerRunsPolicy
只用調用者所在的線程處理任務

3、DiscardOldestPolicy
丟棄等待隊列中最舊的任務,并執行當前任務

4、DiscardPolicy
直接丟棄任務,但不拋出異常
————————————————
版權聲明:本文為CSDN博主「NewBee.Mu」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/NewBeeMu/article/details/122464378

————————————————
版權聲明:本文為CSDN博主「NewBee.Mu」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/NewBeeMu/article/details/122464330

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容