1. 程式人生 > >java執行緒池的核心執行緒數與最大的執行緒數的區別,飽和策略

java執行緒池的核心執行緒數與最大的執行緒數的區別,飽和策略



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

2、飽和策略:

Abort策略:預設策略,新任務提交時直接丟擲未檢查的異常RejectedExecutionException,該異常可由呼叫者捕獲

CallerRuns策略:為調節機制,既不拋棄任務也不丟擲異常,而是將某些任務回退到呼叫者。不會線上程池的執行緒中執行新的任務,而是在呼叫exector的執行緒中執行新的任務。

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