大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) Java實(shí)例教程:ThreadPoolExecutor的原理解析

Java實(shí)例教程:ThreadPoolExecutor的原理解析

更新時間:2020-05-28 16:14:44 來源:動力節(jié)點(diǎn) 瀏覽3048次

ThreadPoolExecutor里面使用到JUC同步器框架AbstractQueuedSynchronizer、大量的位操作、CAS操作。ThreadPoolExecutor提供了固定活躍線程、額外的線程、任務(wù)隊(duì)列以及拒絕策略這幾個重要的功能。下面我們一起來看看Java線程池ThreadPoolExecutor的原理解析。

Java實(shí)例教程:ThreadPoolExecutor的原理解析

1.JUC同步器框架

ThreadPoolExecutor里面使用到JUC同步器框架,主要用于四個方面:

(1)全局鎖mainLock成員屬性,是可重入鎖ReentrantLock類型,主要是用于訪問工作線程Worker集合和進(jìn)行數(shù)據(jù)統(tǒng)計記錄時候的加鎖操作。

(2)條件變量termination,Condition類型,主要用于線程進(jìn)行等待終結(jié)awaitTermination()方法時的帶期限阻塞。

(3)任務(wù)隊(duì)列workQueue,BlockingQueue類型,任務(wù)隊(duì)列,用于存放待執(zhí)行的任務(wù)。

(4)工作線程,內(nèi)部類Worker類型,是線程池中真正的工作線程對象。

2.核心線程

這里先參考ThreadPoolExecutor的實(shí)現(xiàn)并且進(jìn)行簡化,實(shí)現(xiàn)一個只有核心線程的線程池,要求如下:暫時不考慮任務(wù)執(zhí)行異常情況下的處理;任務(wù)隊(duì)列為無界隊(duì)列;線程池容量固定為核心線程數(shù)量;暫時不考慮拒絕策略。

public?class?CoreThreadPool?implements?Executor?{

????private?BlockingQueue<Runnable>?workQueue;
????private?static?final?AtomicInteger?COUNTER?=?new?AtomicInteger();
????private?int?coreSize;
????private?int?threadCount?=?0;

????public?CoreThreadPool(int?coreSize)?{
????????this.coreSize?=?coreSize;
????????this.workQueue?=?new?LinkedBlockingQueue<>();
????}

????@Override
????public?void?execute(Runnable?command)?{
????????if?(++threadCount?<=?coreSize)?{
????????????new?Worker(command).start();
????????}?else?{
????????????try?{
????????????????workQueue.put(command);
????????????}?catch?(InterruptedException?e)?{
????????????????throw?new?IllegalStateException(e);
????????????}
????????}
????}

????private?class?Worker?extends?Thread?{
????????private?Runnable?firstTask;

????????public?Worker(Runnable?runnable)?{
????????????super(String.format("Worker-%d",?COUNTER.getAndIncrement()));
????????????this.firstTask?=?runnable;
????????}

????????@Override
????????public?void?run()?{
????????????Runnable?task?=?this.firstTask;
????????????while?(null?!=?task?||?null?!=?(task?=?getTask()))?{
????????????????try?{
????????????????????task.run();
????????????????}?finally?{
????????????????????task?=?null;
????????????????}
????????????}
????????}
????}

????private?Runnable?getTask()?{
????????try?{
????????????return?workQueue.take();
????????}?catch?(InterruptedException?e)?{
????????????throw?new?IllegalStateException(e);
????????}
????}

????public?static?void?main(String[]?args)?throws?Exception?{
????????CoreThreadPool?pool?=?new?CoreThreadPool(5);
????????IntStream.range(0,?10)
????????????????.forEach(i?->?pool.execute(()?->
????????????????????????System.out.println(String.format("Thread:%s,value:%d",?Thread.currentThread().getName(),?i))));
????????Thread.sleep(Integer.MAX_VALUE);
????}
}


某次運(yùn)行結(jié)果如下:
Thread:Worker-0,value:0
Thread:Worker-3,value:3
Thread:Worker-2,value:2
Thread:Worker-1,value:1
Thread:Worker-4,value:4
Thread:Worker-1,value:5
Thread:Worker-2,value:8
Thread:Worker-4,value:7
Thread:Worker-0,value:6
Thread:Worker-3,value:9

設(shè)計此線程池的時候,核心線程是懶創(chuàng)建的,如果線程空閑的時候則阻塞在任務(wù)隊(duì)列的take()方法,其實(shí)對于ThreadPoolExecutor也是類似這樣實(shí)現(xiàn),只是如果使用了keepAliveTime并且允許核心線程超時則會使用BlockingQueue#poll進(jìn)行輪詢代替永久阻塞。

3.其他附加功能

構(gòu)建ThreadPoolExecutor實(shí)例的時候,需要定義maximumPoolSize(線程池最大線程數(shù))和corePoolSize(核心線程數(shù))。當(dāng)任務(wù)隊(duì)列是有界的阻塞隊(duì)列,核心線程滿負(fù)載,任務(wù)隊(duì)列已經(jīng)滿的情況下,會嘗試創(chuàng)建額外的maximumPoolSize-corePoolSize個線程去執(zhí)行新提交的任務(wù)。當(dāng)ThreadPoolExecutor這里實(shí)現(xiàn)的兩個主要附加功能是:

(1)一定條件下會創(chuàng)建非核心線程去執(zhí)行任務(wù),非核心線程的回收周期(線程生命周期終結(jié)時刻)是keepAliveTime,線程生命周期終結(jié)的條件是:下一次通過任務(wù)隊(duì)列獲取任務(wù)的時候并且存活時間超過keepAliveTime。

(2)提供拒絕策略,也就是在核心線程滿負(fù)載、任務(wù)隊(duì)列已滿、非核心線程滿負(fù)載的條件下會觸發(fā)拒絕策略。

Java實(shí)例教程:ThreadPoolExecutor的原理解析

以上就是動力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對“Java實(shí)例教程:ThreadPoolExecutor的原理解析”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 亚洲另类图片专区 | 91亚洲区国产区精品区 | 欧美日韩一区二区综合在线视频 | 91亚洲国产三上悠亚在线 | 色菇凉天天综合网 | 色综合亚洲七七久久桃花影院 | 久久精品大片 | 精品国产自在现线看久久 | 九九视频国产 | 国产乱肥老妇精品视频 | 福利视频免费看 | 狠狠色很很在鲁视频 | 久久中文字幕免费视频 | 亚洲精品一区二区三区国产 | 欧美激情二区 | 国产真实伦视频在线视频 | 毛片免| 曰鲁夜鲁鲁狠狠综合 | 欧美 日韩 中文字幕 | 尤物免费视频 | 在线一区播放 | 久久毛片久久毛 | 天天做天天爱夜夜想毛片 | 亚洲欧美在线看 | 四虎精品免费永久在线 | 久久中文字幕在线 | 日本视频播放免费线上观看 | 久久频这里精品99香蕉久网址 | 四虎成人免费影院网址 | 国产精品99久久久久久小说 | 欧美在线视频网站 | 亚洲欧美一区二区三区不卡 | 亚洲图片综合网 | 国产精品久久久久久久久久久搜索 | 国产一级理论免费版 | 香蕉色综合 | 久久国产香蕉视频 | 亚洲综合五月天 | 午夜日韩视频 | 欧美日韩国产精品 | 激情五月综合婷婷 |