1. 程式人生 > >什麼是執行緒池?執行緒池的工作原理和使用執行緒池的好處

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

一個執行緒池管理了一組工作執行緒,同時它還包括了一個用於放置等待執行任務的任務佇列(阻塞佇列) 預設情況下,在建立了執行緒池後,執行緒池中的執行緒數為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:執行緒洩露:這是執行緒池應用中的一個嚴重的問題、當任務執行完畢而執行緒沒能返回池中就會發生執行緒洩露現象。