通過ThreadPoolExecutor的方式創(chuàng)建線程池
創(chuàng)新互聯(lián)是一家專業(yè)提供東河企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、HTML5、小程序制作等業(yè)務(wù)。10年已為東河眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。
ThreadPoolExecutor 構(gòu)造方法:
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {
//code...
}
參數(shù)的意義:
- 1.corePoolSize 指定了線程池里的線程數(shù)量,核心線程池大小
- 2.maximumPoolSize 指定了線程池里的最大線程數(shù)量
- 3.keepAliveTime 當(dāng)線程池線程數(shù)量大于corePoolSize時(shí)候,多出來的空閑線程,多長時(shí)間會(huì)被銷毀。
- 4.unit 時(shí)間單位
- 5.workQueue 任務(wù)隊(duì)列,用于存放提交但是尚未被執(zhí)行的任務(wù)。
- 6.threadFactory 線程工廠,用于創(chuàng)建線程,一般可以用默認(rèn)的
- 7.handler 拒絕策略,當(dāng)任務(wù)過多時(shí)候,如何拒絕任務(wù)。當(dāng)提交任務(wù)數(shù)超過maximumPoolSize + workQueue 的size之和,任務(wù)交給RejectedExecutionHandler 處理
線程池的增長
線程池的增長與創(chuàng)建自定義線程池時(shí)設(shè)置的參數(shù)密切相關(guān),重點(diǎn)講解比較容易讓人誤解的 corePoolsize, maximumPoolsize, workQueue之 間關(guān)系。
先看一張圖,理解一下增長過程
當(dāng)線程池小于corePoolsize時(shí),新提交的任務(wù)將創(chuàng)建一個(gè)新的線程執(zhí)行任務(wù),即使此時(shí)線程池中存在空閑線程。當(dāng)線程池達(dá)到corePoolSize時(shí),新提交的任務(wù)將被放入workQueue中,等待線程池中任務(wù)調(diào)度執(zhí)行當(dāng)workQueue已滿,且線程池
當(dāng)一個(gè)任務(wù)通過execute( Runnable)方法欲添加到線程池時(shí):
如果此時(shí)線程池中的數(shù)量小于corePoolSize,即使線程池中的線程都處于空閑狀態(tài),也要?jiǎng)?chuàng)建新的線程來處理被添加的任務(wù)。如果此時(shí)線程池中的數(shù)量等于corePoolSize,但是緩沖隊(duì)列workQueue未滿,那么任務(wù)被放入緩沖隊(duì)列。如果此時(shí)線程池中的數(shù)量大于corePoolSize,緩沖隊(duì)列workQueue滿,并且線程池中的數(shù)量小于maximumPoolSize,建新的線程來處理被添加的任務(wù)。 如果此時(shí)線程池中的數(shù)量大于corePoolSize,緩沖隊(duì)列workQueue滿,并且線程池中的數(shù)量等于maximumPoolSize,那么通過handler所指定的策略來處理此任務(wù)。也就是:處理任務(wù)的優(yōu)先級(jí)為:核心線程corePoolSize、 任務(wù)隊(duì)列workQueue、 最大線程maximumPoolSize, 如果三者都滿了,使用RejectedExecutionHandlier處理被拒絕的任務(wù)。(具體怎么處理,屬于拒絕策略的范疇)
當(dāng)線程池中的線程數(shù)量大于corePoolSize時(shí),如果某線程空閑時(shí)間超過keepAliveTime,線程將被終止。這樣,線程池可以動(dòng)態(tài)的調(diào)整池中的線程數(shù)。
以上就是關(guān)于Java線程池的增長過程全部知識(shí)點(diǎn),感謝大家對創(chuàng)新互聯(lián)的支持。
網(wǎng)站標(biāo)題:詳解Java線程池的增長過程
標(biāo)題網(wǎng)址:http://weahome.cn/article/gjsscj.html