線(xiàn)程池(1) --線(xiàn)程池的好處以及參數(shù)說(shuō)明

通過(guò)Thread創(chuàng)建線(xiàn)程的弊端

線(xiàn)程池

參數(shù)介紹

三個(gè)參數(shù)的關(guān)系:

1.當(dāng)前運(yùn)行的線(xiàn)程數(shù)小于corePoolSize時(shí),直接創(chuàng)建新線(xiàn)程處理任務(wù),即使其他線(xiàn)程空閑。

2.當(dāng)corePoolSize? <= 當(dāng)前線(xiàn)程數(shù) <= maximunPoolSize ,只有當(dāng)workQueue滿(mǎn)的時(shí)候才創(chuàng)建新的線(xiàn)程處理任務(wù)。

3.當(dāng)corePoolSize = maximumPoolSize時(shí),創(chuàng)建的線(xiàn)程池大小是固定的,如果有新任務(wù)提交,當(dāng)workQueue沒(méi)滿(mǎn)的時(shí)候,將請(qǐng)求放入workQueue,等待線(xiàn)程空閑后去取出任務(wù)進(jìn)行處理,如果滿(mǎn)了,還有新任務(wù)提交,則通過(guò)拒絕策略參數(shù)來(lái)指定策略去處理任務(wù)。

4.workQueue是線(xiàn)程池中保存等待執(zhí)行的任務(wù)的阻塞隊(duì)列,當(dāng)提交新任務(wù)到線(xiàn)程池后,線(xiàn)程池會(huì)根據(jù)當(dāng)前線(xiàn)程池中正在運(yùn)行的線(xiàn)程數(shù)量,決定該任務(wù)的處理方式,總共有3種:直接切換,用無(wú)界隊(duì)列,用有界隊(duì)列。

——直接切換:這種方式常用的隊(duì)列是SynchronousQueue;

——使用無(wú)界隊(duì)列:一般使用基于鏈表的阻塞隊(duì)列LinkedBlockingQueue。如果使用這種方式,那么線(xiàn)程池中能夠創(chuàng)建的最大線(xiàn)程數(shù)就是corePoolSize,而maximunPoolSize就不會(huì)起作用了。當(dāng)線(xiàn)程池中所有的核心線(xiàn)程都是Running狀態(tài)時(shí),這時(shí)一個(gè)新的任務(wù)提交就會(huì)放入等待隊(duì)列中。

——使用有界隊(duì)列:一般使用ArrayBlockingQueue。使用該方式可以將線(xiàn)程池的最大線(xiàn)程數(shù)量限制為maximunPoolSize,這樣能夠降低資源的消耗,但同時(shí)這種方式也使得線(xiàn)程池對(duì)線(xiàn)程的調(diào)度變得更加困難,因?yàn)榫€(xiàn)程池和隊(duì)列的容量都是有限的值,所以要想使線(xiàn)程池處理任務(wù)的吞吐率達(dá)到一個(gè)相對(duì)合理的范圍,又想使線(xiàn)程調(diào)度相對(duì)簡(jiǎn)單,并且還要盡可能的降低線(xiàn)程池對(duì)資源的消耗,就需要合理的設(shè)置這兩個(gè)數(shù)量。

? ? ? ? 如果要想降低系統(tǒng)資源的消耗(包括CPU的使用率,操作系統(tǒng)資源的消耗,上下文環(huán)境切換的開(kāi)銷(xiāo)等),可以設(shè)置較大的隊(duì)列容量和較小的線(xiàn)程池容量,但這樣也會(huì)降低線(xiàn)程處理任務(wù)的吞吐量。

? ? ? ? 如果提交的任務(wù)經(jīng)常發(fā)生堵塞,那么可以考慮通過(guò)調(diào)用setMaximunPoolSize()方法來(lái)重新設(shè)定線(xiàn)程池容量。如果隊(duì)列的容量設(shè)置的太小,通常需要將線(xiàn)程池的容量設(shè)置大一點(diǎn),這樣CPU的使用率會(huì)相對(duì)的高一鞋。但如果線(xiàn)程池的容量設(shè)置的過(guò)大,則在提交的任務(wù)數(shù)量太多的情況下,并發(fā)量會(huì)增加,那么線(xiàn)程之間的調(diào)度就是一個(gè)要考慮的問(wèn)題,因?yàn)檫@樣反而有可能降低處理任務(wù)的吞吐量。



拒絕策略:1.(默認(rèn)策略)直接拋出異常。2.讓線(xiàn)程拋出異常。3.拋棄隊(duì)列中最早的任務(wù)。4.拋棄當(dāng)前任務(wù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 為什么使用線(xiàn)程池 當(dāng)我們?cè)谑褂镁€(xiàn)程時(shí),如果每次需要一個(gè)線(xiàn)程時(shí)都去創(chuàng)建一個(gè)線(xiàn)程,這樣實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,但是會(huì)有一個(gè)問(wèn)題...
    閩越布衣閱讀 4,416評(píng)論 10 45
  • 2018年4月29日 星期天 天氣晴 你前半生做過(guò)的事都會(huì)在你后半輩的人生里得到相應(yīng)的反射,你行好事走正路,那么你...
    小鈴鐺er閱讀 643評(píng)論 13 13
  • 家里的百合凋謝了。昨晚就興沖沖地買(mǎi)了一束勿忘我,明明知道九月買(mǎi)的玻璃花瓶很小,但是沒(méi)有想到它小到只可以插上三只勿忘...
    木子在哪閱讀 264評(píng)論 0 0
  • OK,終于滾出來(lái)了,定個(gè)目標(biāo)吧,搞明白了才能去買(mǎi)下一件電子產(chǎn)品!立此為證!??!讓它在購(gòu)物車(chē)呆著先,哼 吃吃吃,喝喝...
    碌陸巷尙gogogo閱讀 209評(píng)論 0 0

友情鏈接更多精彩內(nèi)容