Java線程池核心線程數與最大線程數的區別

線程池策略

corePoolSize:核心線程數;maximunPoolSize:最大線程數
每當有新的任務到線程池時,
第一步: 先判斷線程池中當前線程數量是否達到了corePoolSize,若未達到,則新建線程運行此任務,且任務結束後將該線程保留在線程池中,不做銷燬處理,若當前線程數量已達到corePoolSize,則進入下一步;
第二步: 判斷工作隊列(workQueue)是否已滿,未滿則將新的任務提交到工作隊列中,滿了則進入下一步;
第三步: 判斷線程池中的線程數量是否達到了maxumunPoolSize,如果未達到,則新建一個工作線程來執行這個任務,如果達到了則使用飽和策略來處理這個任務。注意: 在線程池中的線程數量超過corePoolSize時,每當有線程的空閒時間超過了keepAliveTime,這個線程就會被終止。直到線程池中線程的數量不大於corePoolSize爲止。
(由第三步可知,在一般情況下,Java線程池中會長期保持corePoolSize個線程。)

飽和策略

當工作隊列滿且線程個數達到maximunPoolSize後所採取的策略
AbortPolicy:默認策略;新任務提交時直接拋出未檢查的異常RejectedExecutionException,該異常可由調用者捕獲。
CallerRunsPolicy:既不拋棄任務也不拋出異常,使用調用者所在線程運行新的任務。
DiscardPolicy:丟棄新的任務,且不拋出異常。
DiscardOldestPolicy:調用poll方法丟棄工作隊列隊頭的任務,然後嘗試提交新任務
自定義策略:根據用戶需要定製。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章