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