執行緒池的工作原理

2021-10-10 08:42:33 字數 966 閱讀 4429

首先, 當有乙個新的任務加入到執行緒池的任務佇列中時, 執行緒池會先判斷當前執行緒數是否小於核心執行緒數, 如果小於, 這執行緒池會建立乙個新的執行緒

​ 如果當前執行緒數大於或等於核心執行緒數, 則會將這個新的任務加入到阻塞佇列中

​ 這時如果任務的不斷加入導致阻塞佇列滿了, 則執行緒池又會建立乙個新的臨時執行緒, 處理阻塞佇列中的任務

​ 如果處理完阻塞佇列中的任務, 臨時執行緒等待的時間超過空閒執行緒的存活時間, 執行緒池就會銷毀臨時執行緒

​ 如果新的任務進來, 建立的臨時執行緒加上核心執行緒數達到最大執行緒數, 而這時阻塞佇列又是滿的, 執行緒池就會根據拒絕策略拒絕任務

executorservice threadpool = new threadpoolexecutor(

2, //核心執行緒數

5, //最大執行緒數

1l, //空閒執行緒存活時間

timeunit.seconds, //存活時間單位

new linkedblockingqueue<>(3), //阻塞佇列

executors.defaultthreadfactory(), //建立執行緒的工廠類

new threadpoolexecutor.callerrunspolicy() //拒絕策略

);

執行緒池的拒絕策略

abortpolicy:預設的策略,直接丟擲rejectedexecutionexception異常,阻止系統正常執行。

callerrunspolicy:既不會丟擲異常,也不會終止任務,而是將任務返回給呼叫者。

discardoldestpolicy:拋棄佇列中等待最久的任務,然後把當前任務加入佇列中嘗試再次提交任務。

discardpolicy:直接丟棄任務,不做任何處理。

執行緒池工作原理

執行緒池狀態的切換 執行緒池關鍵類的uml圖 執行緒池就是把任務提交和任務執行解耦。首先看一下執行緒池的使用 public static void main string args throws interruptedexception 2,提交任務 es.shutdown 3,執行緒池關閉 跟進原...

執行緒池的工作原理

1 當提交乙個新任務到執行緒池時首先執行緒池判斷核心執行緒池 corepoolsize 是否已滿?沒滿,建立乙個工作執行緒來執行任務。滿了,則判斷工作佇列 workqueue 是否已滿?沒滿,則將新提交的任務儲存在工作佇列裡。滿了,則判斷最大執行緒池 maximumpoolsize 是否已滿?沒滿,...

什麼是執行緒池?執行緒池的工作原理和使用執行緒池的好處

乙個執行緒池管理了一組工作執行緒,同時它還包括了乙個用於放置等待執行任務的任務佇列 阻塞佇列 預設情況下,在建立了執行緒池後,執行緒池中的執行緒數為0.當任務提交給執行緒池之後的處理策略如下 1 如果此時執行緒池中的數量小於corepoolsize 核心池的大小 即使執行緒池中的執行緒都處於空閒狀態...