一、什么是線程池
線程池是多線程處理中常用的一種模式。線程池創建多個線程,用于執行一堆任務,這些任務以隊列的形式進行排列。這樣可以很大程度上提高程序的運行效率,避免線程的創建和銷毀帶來的開銷。
線程池一般包含以下幾種主要構成部分:一個任務隊列,一個或多個工作線程,一個線程創建和銷毀的機制。在任務隊列中存放的是待執行的任務,這些任務等待工作線程來執行。
二、線程池的作用
1、控制線程數量
線程池可以設定線程的最大并發數,避免大量的線程同時運行,耗盡系統資源。
2、復用線程
在線程池中,線程執行完任務后,不會立刻銷毀,而是可以繼續執行其他任務,因此可以減少線程的創建和銷毀的開銷。
三、線程池的問題
1、線程池大小的設定
線程池大小的設定需要根據實際任務的CPU時間,IO時間等因素綜合考慮,沒有一個固定的公式。
2、任務的排隊策略
如果線程池中的所有線程都在執行任務,新來的任務如何處理也是需要考慮的問題,常見的策略有:直接拒絕任務,拋出異常;將任務放入隊列,等待有空閑線程時執行;如果任務實現了某種接口,可以將任務拋回給調用者來執行。
延伸閱讀
線程池優化
(1)合理配置線程池大小,可以根據系統的CPU的數量,IO密集型或者CPU密集型任務來合理配置。
(2)如果任務的執行時間過長,可以考慮任務的拆分。