線程池是一種用于管理和調(diào)度線程執(zhí)行的技術(shù),通過(guò)將任務(wù)分配到線程池中的線程進(jìn)行處理,可以有效地控制并發(fā)線程的數(shù)量,提高系統(tǒng)的資源利用率和任務(wù)處理效率。在使用線程池之前,我們需要了解線程池的七大核心參數(shù)以及它們的執(zhí)行順序。
- corePoolSize(核心線程數(shù)):
線程池中一直存活的線程數(shù)量。在線程池初始化或者任務(wù)提交后,線程池會(huì)首先創(chuàng)建corePoolSize個(gè)線程來(lái)執(zhí)行任務(wù),即使這些線程處于空閑狀態(tài)。 - maximumPoolSize(最大線程數(shù)):
線程池中允許存在的最大線程數(shù)量。如果隊(duì)列中的任務(wù)數(shù)超過(guò)了maximumPoolSize,那么線程池會(huì)創(chuàng)建新的線程來(lái)處理該任務(wù)。可通過(guò)調(diào)整該參數(shù)來(lái)設(shè)定線程池的最大并發(fā)處理能力。 - keepAliveTime(線程空閑時(shí)間):
在線程池中,超過(guò)corePoolSize數(shù)量的線程在空閑時(shí)間超過(guò)keepAliveTime后會(huì)被銷毀,以減少資源的消耗。通常情況下,線程在空閑時(shí)間超過(guò)keepAliveTime后,會(huì)被銷毀直到線程池中的線程數(shù)不超過(guò)corePoolSize。 - unit(線程空閑時(shí)間單位):
keepAliveTime的時(shí)間單位。可以選擇秒、毫秒、微秒等單位。 - workQueue(任務(wù)隊(duì)列):
線程池中用于存儲(chǔ)任務(wù)的隊(duì)列。當(dāng)任務(wù)來(lái)臨時(shí),如果當(dāng)前線程數(shù)小于corePoolSize,則會(huì)創(chuàng)建新的線程來(lái)執(zhí)行任務(wù);如果當(dāng)前線程數(shù)大于等于corePoolSize,則會(huì)將任務(wù)加入到workQueue中。 - threadFactory(線程工廠):
線程工廠用于創(chuàng)建線程,可以定制線程的一些屬性,如線程名、優(yōu)先級(jí)等。可以通過(guò)實(shí)現(xiàn)ThreadFactory接口來(lái)自定義線程工廠。 - handler(飽和策略):
當(dāng)線程池中的線程數(shù)達(dá)到maximumPoolSize并且任務(wù)隊(duì)列已滿時(shí),需要采取一種策略來(lái)處理新提交的任務(wù)。常見(jiàn)的飽和策略有:AbortPolicy(拋出RejectedExecutionException異常)、CallerRunsPolicy(由提交任務(wù)的線程來(lái)執(zhí)行該任務(wù))、DiscardOldestPolicy(丟棄隊(duì)列中最舊的任務(wù))和DiscardPolicy(直接丟棄新提交的任務(wù))。
以上七個(gè)參數(shù)的執(zhí)行順序如下:
首先,當(dāng)任務(wù)提交給線程池時(shí),線程池會(huì)判斷當(dāng)前線程數(shù)是否小于核心線程數(shù),如果小于則創(chuàng)建新線程執(zhí)行任務(wù);否則,將任務(wù)加入到任務(wù)隊(duì)列中。
其次,在任務(wù)隊(duì)列中,線程池會(huì)判斷隊(duì)列是否已滿,如果已滿則判斷當(dāng)前線程數(shù)是否小于最大線程數(shù),如果小于則根據(jù)具體的飽和策略來(lái)決定是否創(chuàng)建新線程執(zhí)行任務(wù)。
接著,如果任務(wù)隊(duì)列未滿或者線程池未達(dá)到最大線程數(shù),則線程池會(huì)繼續(xù)判斷當(dāng)前線程數(shù)是否小于核心線程數(shù),如果小于則創(chuàng)建新線程執(zhí)行任務(wù);否則,將任務(wù)加入到任務(wù)隊(duì)列中。
然后,在任務(wù)隊(duì)列中的任務(wù)等待執(zhí)行時(shí),線程池會(huì)根據(jù)空閑時(shí)間判斷是否銷毀多余的線程,直到線程數(shù)不超過(guò)核心線程數(shù)。
最后,在線程池中如果沒(méi)有可空閑的線程,并且任務(wù)隊(duì)列已滿,則根據(jù)具體的飽和策略來(lái)處理新提交的任務(wù)。
綜上所述,線程池的核心參數(shù)在任務(wù)提交到線程池后的執(zhí)行順序是:核心線程數(shù) -> 最大線程數(shù) -> 線程空閑時(shí)間 -> 任務(wù)隊(duì)列 -> 線程工廠 -> 飽和策略。了解線程池的核心參數(shù)及其執(zhí)行順序可以幫助我們更好地理解和使用線程池,提高程序的性能和可維護(hù)性。
-
存儲(chǔ)
+關(guān)注
關(guān)注
13文章
4314瀏覽量
85842 -
參數(shù)
+關(guān)注
關(guān)注
11文章
1834瀏覽量
32213 -
線程池
+關(guān)注
關(guān)注
0文章
57瀏覽量
6846
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
跨平臺(tái)的線程池組件--TP組件
買藥秒送 JADE動(dòng)態(tài)線程池實(shí)踐及原理淺析

java自帶的線程池方法
基于Nacos的簡(jiǎn)單動(dòng)態(tài)化線程池實(shí)現(xiàn)
核心線程數(shù)和最大線程數(shù)區(qū)別
cpu核心數(shù)和線程數(shù)的關(guān)系
線程池的兩個(gè)思考

線程池三大核心參數(shù)的含義 線程池核心線程數(shù)制定策略

評(píng)論