回覆列表
-
1 # 飛鳥在天空
-
2 # 山東中公優就業
1.減少了建立和銷燬執行緒的次數,每個工作執行緒都可以被重複利用,可執行多個任務。
2.可以根據系統的承受能力,調整執行緒池中工作線執行緒的數目,防止因為消耗過多的記憶體,而把伺服器累趴下(每個執行緒需要大約1MB記憶體,執行緒開的越多,消耗的記憶體也就越大,最後宕機)。
Java裡面執行緒池的頂級介面是Executor,但是嚴格意義上講Executor並不是一個執行緒池,而只是一個執行執行緒的工具。真正的執行緒池介面是ExecutorService。
執行緒池主要用來解決執行緒生命週期開銷問題和資源不足問題。透過對多個任務重用執行緒,執行緒建立的開銷就被分攤到了多個任務上了,而且由於在請求到達時執行緒已經存在,所以消除了執行緒建立所帶來的延遲。這樣,就可以立即為請求服務,使應用程式響應更快。另外,透過適當地調整執行緒池中的執行緒數目可以防止出現資源不足的情況。
以Java為例講解,在Java中,如果每當一個請求到達就建立一個新執行緒,開銷是相當大的。在實際使用中,每個請求建立新執行緒的伺服器在建立和銷燬執行緒上花費的時間和消耗的系統資源,甚至可能要比花在處理實際的使用者請求的時間和資源要多得多。
除了建立和銷燬執行緒的開銷之外,活動的執行緒也需要消耗系統資源。如果在一個JVM裡建立太多的執行緒,可能會導致系統由於過度消耗記憶體或“切換過度”而導致系統資源不足。為了防止資源不足,伺服器應用程式需要一些辦法來限制任何給定時刻處理的請求數目,儘可能減少建立和銷燬執行緒的次數,特別是一些資源耗費比較大的執行緒的建立和銷燬,儘量利用已有物件來進行服務,這就是“池化資源”技術產生的原因。