java 核心線程大小與線程池最大大小的區別

1、當提交一個新任務到線程池時首先線程池判斷基本線程池(corePoolSize)是否已滿?沒滿,創建一個工作線程來執行任務。滿了,則進入下個流程;其次線程池判斷工作隊列(workQueue)是否已滿?沒滿,則將新提交的任務存儲在工作隊列裏。滿了,則進入下個流程;最後線程池判斷整個線程池(maximumPoolSize)是否已滿?沒滿,則創建一個新的工作線程來執行任務,滿了,則交給飽和策略來處理這個任務;如果線程池中的線程數量大於 corePoolSize 時,如果某線程空閒時間超過keepAliveTime,線程將被終止,直至線程池中的線程數目不大於corePoolSize;如果允許爲核心池中的線程設置存活時間,那麼核心池中的線程空閒時間超過 keepAliveTime,線程也會被終止。

核心線程池的線程在idle的時候不會被終止,其他的線程會終止

2、飽和策略:

Abort策略:默認策略,新任務提交時直接拋出未檢查的異常RejectedExecutionException,該異常可由調用者捕獲。

CallerRuns策略:爲調節機制,既不拋棄任務也不拋出異常,而是將某些任務回退到調用者。不會在線程池的線程中執行新的任務,而是在調用exector的線程中運行新的任務。

Discard策略:新提交的任務被拋棄。

DIscardOld策略:和最老的線程嘗試競爭,競爭不過就被拋棄。
————————————————
版權聲明:本文爲CSDN博主「qq_19006739」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_19006739/article/details/79688506

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