ThreadPoolExecutor 執行緒池

2021-09-24 15:06:45 字數 961 閱讀 4693

threadpoolexecutor 執行緒池

執行緒池引數解釋:

threadpoolexecutor( 

int corepoolsize, // 執行緒池維護執行緒的最少數量

int maximumpoolsize, // 執行緒池維護執行緒的最大數量

long keepalivetime, // 執行緒池維護執行緒所允許的空閒時間

timeunit unit, // 執行緒池維護執行緒所允許的空閒時間的單位

blockingqueueworkqueue, // 執行緒池所使用的緩衝佇列

threadfactory threadfactory, rejectedexecutionhandler handler // 執行緒池對拒絕任務的處理策略

)

執行緒池的工作過程

執行緒池剛建立時,裡面沒有乙個執行緒。任務佇列是作為引數傳進來的。不過,就算佇列裡面有任務,執行緒池也不會馬上執行它們。

當呼叫 execute() 方法新增乙個任務時,執行緒池會做如下判斷:

a. 如果正在執行的執行緒數量小於 corepoolsize,那麼馬上建立執行緒執行這個任務;

b. 如果正在執行的執行緒數量大於或等於 corepoolsize,那麼將這個任務放入佇列;

c. 如果這時候佇列滿了,而且正在執行的執行緒數量小於 maximumpoolsize,那麼還是要建立執行緒執行這個任務;

d. 如果佇列滿了,而且正在執行的執行緒數量大於或等於 maximumpoolsize,那麼執行緒池會丟擲異常。

當乙個執行緒完成任務時,它會從佇列中取下乙個任務來執行。

當乙個執行緒空閒,超過一定的時間(keepalivetime)時,執行緒池會判斷,如果當前執行的執行緒數大於 corepoolsize,那麼這個執行緒就被停掉。所以執行緒池的所有任務完成後,它最終會收縮到 corepoolsize 的大小

ThreadPoolExecutor執行緒池原始碼解讀

主要變數 private volatile int corepoolsize private volatile int maximumpoolsize private volatile int poolsize 建構函式 也就是建立類的時候,需要注入引數。public threadpoolexecu...

ThreadPoolExecutor執行緒池引數設定

jdk1.5中引入了強大的concurrent包,其中最常用的莫過了執行緒池的實現threadpoolexecutor,它給我們帶來了極大的方便,但同時,對於該執行緒池不恰當的設定也可能使其效率並不能達到預期的效果,甚至僅相當於或低於單執行緒的效率。threadpoolexecutor類可設定的引數...

ThreadPoolExecutor執行緒池

python中已經有了threading模組,為什麼還需要執行緒池呢,執行緒池又是什麼東西呢?在介紹執行緒同步的訊號量機制的時候,舉得例子是爬蟲的例子,需要控制同時爬取的執行緒數,例子中建立了20個執行緒,而同時只允許3個執行緒在執行,但是20個執行緒都需要建立和銷毀,執行緒的建立是需要消耗系統資源...