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