日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

淺談Java ThreadPoolExecutor的使用

瀏覽:37日期:2022-08-12 15:46:51
目錄一、前言二、ThreadPoolExecutor三、構(gòu)造函數(shù)參數(shù)解析四、總結(jié)一、前言

線程池主要由以下4個(gè)核心組件組成。

線程池管理器:用于創(chuàng)建并管理線程池 工作線程:線程池中執(zhí)行具體任務(wù)的線程 任務(wù)接口:用于定義工作線程的調(diào)度和執(zhí)行策略,只有線程實(shí)現(xiàn)了該接口,線程中的任務(wù)才能被線程池調(diào)度 任務(wù)隊(duì)列:放待處理的任務(wù),新的任務(wù)將會(huì)不斷被加入隊(duì)列中,執(zhí)行完成的任務(wù)將從隊(duì)列中移除

淺談Java ThreadPoolExecutor的使用

二、ThreadPoolExecutor

如下是線程池的構(gòu)造方法

public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) {if (corePoolSize < 0 || maximumPoolSize <= 0 || maximumPoolSize < corePoolSize || keepAliveTime < 0) throw new IllegalArgumentException();if (workQueue == null || threadFactory == null || handler == null) throw new NullPointerException();this.acc = System.getSecurityManager() == null ?null :AccessController.getContext();this.corePoolSize = corePoolSize;this.maximumPoolSize = maximumPoolSize;this.workQueue = workQueue;this.keepAliveTime = unit.toNanos(keepAliveTime);this.threadFactory = threadFactory;this.handler = handler;}

其中具體參數(shù)含義為:

1.corePoolSize:線程池中核心線程的數(shù)量

2.maximumPoolSize:線程池中最大線程的數(shù)量

3.keepAliveTime:當(dāng)線程數(shù)量超過corePoolSize時(shí),空閑線程的存活時(shí)間

4.unit:keepAliveTime的時(shí)間單位

5.workQueue:任務(wù)隊(duì)列,被提交但尚未被執(zhí)行的任務(wù)存放的地方

6.threadFactory:線程工廠,用于創(chuàng)建線程,可使用默認(rèn)的線程工廠或自定義線程工廠

7.handler:由于任務(wù)過多或其他原因?qū)е戮€程池?zé)o法處理時(shí)的任務(wù)拒絕策略

三、構(gòu)造函數(shù)參數(shù)解析

編寫測試類如下:

public class ThreadPoolSerialTest { public static void main(String[] args) {//核心線程數(shù)int corePoolSize = 2;//最大線程數(shù)int maximumPoolSize = 4;//超過corePoolSize線程數(shù)量的線程最大空閑時(shí)間long keepAliveTime = 2;//以秒為時(shí)間單位TimeUnit unit = TimeUnit.SECONDS;//創(chuàng)建工作隊(duì)列,用于存放提交的等待執(zhí)行任務(wù)BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(2);ThreadPoolExecutor threadPoolExecutor = null;try { // 1.創(chuàng)建線程池 threadPoolExecutor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, new ThreadPoolExecutor.AbortPolicy()); // 2.循環(huán)提交任務(wù) for (int i = 0; i < 6; i++) {//提交任務(wù)的索引final int index = (i+1);threadPoolExecutor.submit(()->{ //線程打印輸出 System.out.println('大家好,我是線程:'+index); try {//模擬線程執(zhí)行時(shí)間,10sThread.sleep(10000);System.out.println('線程:'+index+'運(yùn)行完畢'); } catch (InterruptedException e) {e.printStackTrace(); }});//每個(gè)任務(wù)提交后休眠500ms再提交下一個(gè)任務(wù),用于保證提交順序Thread.sleep(500); }} catch (InterruptedException e) { e.printStackTrace();} finally { // 3.關(guān)閉線程池 threadPoolExecutor.shutdown();} }}

其中循環(huán)了6次,讓線程池執(zhí)行了6次任務(wù),恰好滿足maximumPoolSize+workQueue容量=并發(fā)執(zhí)行任務(wù)數(shù)。輸出結(jié)果如下:

大家好,我是線程:1大家好,我是線程:2大家好,我是線程:5大家好,我是線程:6線程:1運(yùn)行完畢大家好,我是線程:3線程:2運(yùn)行完畢大家好,我是線程:4線程:5運(yùn)行完畢線程:6運(yùn)行完畢線程:3運(yùn)行完畢線程:4運(yùn)行完畢

這段輸出看似沒有規(guī)律,其實(shí)這里輸出完全是由線程池控制的;下面就來分行解析輸出:

大家好,我是線程:1 大家好,我是線程:2大家好,我是線程:5大家好,我是線程:6

1.全新線程池被創(chuàng)建后,有Runnable或CallBack接口的實(shí)現(xiàn)被提交給線程池執(zhí)行;線程池的corePoolSize=2,此時(shí)前兩個(gè)任務(wù)提交后就立即執(zhí)行,便輸出了線程1 線程2;

2.此時(shí)仍繼續(xù)向線程池提交任務(wù),線程池中workQueue容量=2,被加入的任務(wù)存放到任務(wù)隊(duì)列中,即把線程3 線程4存放到了任務(wù)隊(duì)列中;

3.任務(wù)隊(duì)列充滿后,仍繼續(xù)向線程池提交任務(wù),線程池的maximumPoolSize=4,除開核心線程數(shù)2個(gè)外還允許創(chuàng)建4-2個(gè)線程來執(zhí)行任務(wù),便輸出了線程5 線程6

線程:1運(yùn)行完畢大家好,我是線程:3線程:2運(yùn)行完畢大家好,我是線程:4

1.線程:1運(yùn)行完畢:表示第一個(gè)線程任務(wù)執(zhí)行完畢了

2.大家好,我是線程:3:線程1運(yùn)行完畢后,此時(shí)線程池中有一個(gè)空閑的線程,第一個(gè)進(jìn)入任務(wù)隊(duì)列中的任務(wù)第一個(gè)交給線程處理

3.線程:2運(yùn)行完畢 大家好,我是線程:4 :和上面線程執(zhí)行完畢,任務(wù)對列中任務(wù)執(zhí)行一致

線程:5運(yùn)行完畢線程:6運(yùn)行完畢線程:3運(yùn)行完畢線程:4運(yùn)行完畢

因?yàn)槊恳粋€(gè)任務(wù)的執(zhí)行時(shí)間控制的是一樣的,此時(shí)輸出的內(nèi)容便是先被線程池執(zhí)行的任務(wù)先執(zhí)行完畢。

四、總結(jié)

線程池剛被創(chuàng)建時(shí),只是向系統(tǒng)申請一個(gè)用于執(zhí)行線程隊(duì)列和管理線程池的資源。在調(diào)用execute()添加一個(gè)任務(wù)時(shí),線程池會(huì)按照以下流程執(zhí)行任務(wù):

正在運(yùn)行的線程數(shù)量a:a<corePoolSize,線程池立即創(chuàng)建線程并執(zhí)行任務(wù);若此時(shí)a=corePoolSize,則任務(wù)被存放到workQueue任務(wù)隊(duì)列中,直到任務(wù)隊(duì)列被充滿

任務(wù)隊(duì)列workQueue已充滿且正在運(yùn)行的線程數(shù)a:a<maximumPoolSize,線程池立即創(chuàng)建非核心線程并執(zhí)行任務(wù);若有任務(wù)執(zhí)行完畢,該任務(wù)將被線程池隊(duì)列中移除,線程池從隊(duì)列中取先入隊(duì)的任務(wù)執(zhí)行;當(dāng)線程處于空閑狀態(tài)的時(shí)間超過keepAliveTime時(shí)間時(shí),正在運(yùn)行的線程數(shù)acorePoolSize<a,線程池停止空閑的線程。線程池將任務(wù)執(zhí)行完畢后,線程池會(huì)收縮到corePoolSize大小

任務(wù)隊(duì)列workQueue已充滿且正在運(yùn)行的線程數(shù)a:a=maximumPoolSize,線程池拒絕執(zhí)行該任務(wù)并拋出RejectExecutionException異常

淺談Java ThreadPoolExecutor的使用

到此這篇關(guān)于淺談Java ThreadPoolExecutor的使用的文章就介紹到這了,更多相關(guān)Java ThreadPoolExecutor內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美成a人免费观看久久| 日本精品影院| 欧美女激情福利| 日韩三区免费| 日韩免费视频| 日韩专区精品| 亚洲va在线| 樱桃成人精品视频在线播放| 五月天久久网站| 国产精品日本| 亚洲色图网站| 国产乱论精品| 国产suv精品一区| 久久天堂精品| 亚洲高清影视| 国产va在线视频| 亚洲高清av| 午夜在线播放视频欧美| 日韩精品亚洲一区二区三区免费| 欧美日韩网址| av资源中文在线| 五月天激情综合网| 日韩区欧美区| 国产成人黄色| 欧美日韩国产一区精品一区| 亚洲精一区二区三区| 久久精品97| 国产黄大片在线观看| 亚洲激情中文在线| 四虎在线精品| 国产精品99精品一区二区三区∴| 精品伊人久久久| 久久久久久美女精品| 中文字幕乱码亚洲无线精品一区| 一区二区不卡| 亚洲精选av| 精品国产一区二区三区噜噜噜| 久久国产婷婷国产香蕉| 国产 日韩 欧美 综合 一区| 久久亚洲精品中文字幕蜜潮电影| 久久精品成人| 日韩精品a在线观看91| 麻豆精品视频在线观看| 91精品国产福利在线观看麻豆| 亚洲天堂日韩在线| 欧美激情日韩| 偷拍欧美精品| 国产欧美日韩精品一区二区三区 | 亚洲aa在线| 精品一区91| 99视频精品| 国产免费播放一区二区| 成人日韩在线| 少妇精品久久久一区二区三区| 精品一区二区男人吃奶| 国产模特精品视频久久久久| 97久久精品| 欧美日韩国产v| 亚洲一级二级| 亚洲精品无吗| 国产一区二区三区黄网站| 久久91导航| 久久人人精品| 欧美黄色一区| 国产欧美日韩精品一区二区免费| 亚洲国产专区校园欧美| 国产精品美女在线观看直播| 99国产一区| 国产乱子精品一区二区在线观看| 日韩激情精品| 免费观看日韩电影| 欧美激情另类| 久久久久国产精品一区三寸| 欧美 日韩 国产精品免费观看| 青草国产精品| 精品九九久久| 亚洲综合五月| 免费成人在线观看| 97在线精品| 青青久久av| 麻豆精品在线播放| 麻豆91精品视频| 欧美日韩国产探花| 1024精品一区二区三区| 午夜av不卡| 伊人精品久久| 欧美一区二区三区高清视频 | 亚洲a级精品| 在线亚洲国产精品网站| 久久精品国产久精国产爱| 日韩欧美精品综合| 久久97视频| 一区三区视频| 久久99视频| 中文字幕亚洲在线观看| 久久影院午夜精品| 欧美一级久久| 巨乳诱惑日韩免费av| 久久99精品久久久久久园产越南| 欧洲在线一区| 一区二区不卡| 乱一区二区av| 日本久久综合| 午夜一区在线| 999久久久免费精品国产| 69堂精品视频在线播放| 日本少妇一区| 亚洲婷婷免费| 国产精品调教视频| 久久久久久自在自线| 91成人精品在线| 亚洲第一精品影视| 精品视频一区二区三区在线观看| 欧美综合国产| 亚洲天堂久久| 欧美亚洲国产精品久久| 欧美三区四区| 国产精品调教视频| 青草国产精品| 国产日韩视频| 久久黄色影视| 国产欧美日韩一区二区三区四区| 中文字幕av一区二区三区人| 国产精品社区| 日韩欧美激情电影| 亚洲欧美一级| 伊人影院久久| 久久狠狠久久| 日本伊人午夜精品| 日韩成人三级| 欧美极品中文字幕| 亚洲欧洲免费| 久久裸体视频| 国内激情久久| 亚洲精品观看| 亚洲专区视频| 亚洲一级少妇| 日韩国产一区| 不卡专区在线| 亚洲va中文在线播放免费| 欧美精选一区二区三区| 国产乱子精品一区二区在线观看| 91免费精品国偷自产在线在线| 私拍精品福利视频在线一区| 欧美理论视频| 国产尤物精品| 国产精品主播在线观看| 亚洲涩涩av| 五月激激激综合网色播| 精品国产精品国产偷麻豆| 日本aⅴ免费视频一区二区三区| 蜜桃精品视频| 国产高清一区| 亚洲婷婷丁香| 久久69成人| 97视频热人人精品免费| 久久精品国产www456c0m| 免费中文字幕日韩欧美| 久久国产三级精品| 欧美日韩免费观看视频| 欧美日韩精品免费观看视频完整| 亚洲丝袜美腿一区| 国产精品二区影院| 免费不卡中文字幕在线| 伊人久久亚洲热| 国产精品久久久久77777丨| 麻豆精品蜜桃| 欧美日韩夜夜| 韩日一区二区三区| 国产精品久久久久毛片大屁完整版 | 亚洲国内精品| 麻豆精品在线| 日本伊人午夜精品| 亚洲大全视频| 国产精选久久| 蜜桃av一区二区三区电影| 欧美好骚综合网| 欧美日韩va| 中文字幕av一区二区三区人| 久久人人88| 日韩免费高清| 麻豆成人av在线| 91精品视频一区二区| 91高清一区| 亚洲天堂一区二区| 国产一区二区三区四区大秀| 亚洲欧洲美洲国产香蕉| 伊人久久亚洲影院| 亚洲午夜在线| 日韩免费一区| 国产麻豆久久| 日韩欧美二区| 秋霞国产精品| 久久精品青草| 99精品视频在线| 美女福利一区二区三区| 韩国精品主播一区二区在线观看| 国产精品成人a在线观看| 国产一区二区三区四区五区| 麻豆精品蜜桃视频网站|