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

2021-09-27 11:26:27 字數 1266 閱讀 6937

乙個執行緒池管理了一組工作執行緒,同時它還包括了乙個用於放置等待執行任務的任務佇列(阻塞佇列) 

預設情況下,在建立了執行緒池後,執行緒池中的執行緒數為0.當任務提交給執行緒池之後的處理策略如下: 

1:如果此時執行緒池中的數量小於corepoolsize(核心池的大小),即使執行緒池中的執行緒都處於空閒狀態,也要建立新的執行緒來處理被新增的任務(也就是說每來乙個任務,就要建立乙個執行緒來執行任務) 

2:如果此時執行緒池中的數量大於等於corepoolsize ,但是緩衝佇列workqueue未滿,那麼任務被放入緩衝佇列,則該任務會等待空閒執行緒將其取出去執行。 

3:如果此時執行緒池中的數量大於等於corepoolsize,緩衝佇列也滿了,但是執行緒池中的數量小於maximumpoolsize(執行緒池最大執行緒數),此時就會建新的執行緒來處理被新增的任務。 

4:如果此時執行緒池中的數量大於等於corepoolsize,緩衝佇列滿,執行緒池中的數量等於maximumpoolsize,那麼通過rejectedexecutionhandler所指定的任務拒絕策略來處理此任務。 

5:特別注意,在 corepoolsize 和 maximumpoolsize 之間的執行緒數會被自動釋放。當執行緒池中線程數量大於 corepoolsize 時,如果某執行緒空閒時間超過 keepalivetime,執行緒將被終止,直至執行緒池中的執行緒數目不大於 corepoolsize。這樣,執行緒池可以動態的調整池中的執行緒數。

執行緒池的好處~ 

1:通過重複利用已建立的執行緒,減少在建立和銷毀執行緒上所花的時間以及系統資源的開銷。 

2:提高響應速度,當任務到達時,任務可以不需要等到執行緒建立就可以立即執行。 

3:提高執行緒的可管理性,使用執行緒池可以對執行緒進行統一的分配和監控。 

4:如果不使用執行緒池,有可能造成系統建立大量執行緒而導致消耗完系統記憶體。

執行緒池的注意事項: 

1:執行緒池的大小:多執行緒應用並非執行緒越多越好。需要根據系統執行的硬體環境以及應用本身的特點決定執行緒池的大小。一般來說,如果**結構合理,執行緒數與cpu數量相適合即可。如果執行緒執行時可能出現阻塞現象,可相應增加池的大小、如果有必要可採用自適應演算法來動態調整執行緒池的大小。以提高cpu的有效利用率和系統的整體效能。 

2:併發錯誤:多執行緒應用要特別注意併發錯誤,要從邏輯上保證程式的正確性,注意避免死鎖現象的發生。 

3:執行緒洩露:這是執行緒池應用中的乙個嚴重的問題、當任務執行完畢而執行緒沒能返回池中就會發生執行緒洩露現象。

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

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

執行緒池工作原理

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

什麼是執行緒池

假設有一段 你希望非同步執行它,是不是要寫出這樣的 new thread r start 這種寫法當然可以完成功能,可是你這樣寫,老王這樣寫,老張也這樣寫,程式中到處都是這樣建立執行緒的方法,需要寫乙個統一的工具類讓大家呼叫 1 新執行緒 直接建立乙個新執行緒執行 2class flashexecu...