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