成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

淺談Java ThreadPoolExecutor的使用

瀏覽:5日期:2022-08-12 15:46:51
目錄一、前言二、ThreadPoolExecutor三、構造函數參數解析四、總結一、前言

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

線程池管理器:用于創建并管理線程池 工作線程:線程池中執行具體任務的線程 任務接口:用于定義工作線程的調度和執行策略,只有線程實現了該接口,線程中的任務才能被線程池調度 任務隊列:放待處理的任務,新的任務將會不斷被加入隊列中,執行完成的任務將從隊列中移除

淺談Java ThreadPoolExecutor的使用

二、ThreadPoolExecutor

如下是線程池的構造方法

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;}

其中具體參數含義為:

1.corePoolSize:線程池中核心線程的數量

2.maximumPoolSize:線程池中最大線程的數量

3.keepAliveTime:當線程數量超過corePoolSize時,空閑線程的存活時間

4.unit:keepAliveTime的時間單位

5.workQueue:任務隊列,被提交但尚未被執行的任務存放的地方

6.threadFactory:線程工廠,用于創建線程,可使用默認的線程工廠或自定義線程工廠

7.handler:由于任務過多或其他原因導致線程池無法處理時的任務拒絕策略

三、構造函數參數解析

編寫測試類如下:

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

其中循環了6次,讓線程池執行了6次任務,恰好滿足maximumPoolSize+workQueue容量=并發執行任務數。輸出結果如下:

大家好,我是線程:1大家好,我是線程:2大家好,我是線程:5大家好,我是線程:6線程:1運行完畢大家好,我是線程:3線程:2運行完畢大家好,我是線程:4線程:5運行完畢線程:6運行完畢線程:3運行完畢線程:4運行完畢

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

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

1.全新線程池被創建后,有Runnable或CallBack接口的實現被提交給線程池執行;線程池的corePoolSize=2,此時前兩個任務提交后就立即執行,便輸出了線程1 線程2;

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

3.任務隊列充滿后,仍繼續向線程池提交任務,線程池的maximumPoolSize=4,除開核心線程數2個外還允許創建4-2個線程來執行任務,便輸出了線程5 線程6

線程:1運行完畢大家好,我是線程:3線程:2運行完畢大家好,我是線程:4

1.線程:1運行完畢:表示第一個線程任務執行完畢了

2.大家好,我是線程:3:線程1運行完畢后,此時線程池中有一個空閑的線程,第一個進入任務隊列中的任務第一個交給線程處理

3.線程:2運行完畢 大家好,我是線程:4 :和上面線程執行完畢,任務對列中任務執行一致

線程:5運行完畢線程:6運行完畢線程:3運行完畢線程:4運行完畢

因為每一個任務的執行時間控制的是一樣的,此時輸出的內容便是先被線程池執行的任務先執行完畢。

四、總結

線程池剛被創建時,只是向系統申請一個用于執行線程隊列和管理線程池的資源。在調用execute()添加一個任務時,線程池會按照以下流程執行任務:

正在運行的線程數量a:a<corePoolSize,線程池立即創建線程并執行任務;若此時a=corePoolSize,則任務被存放到workQueue任務隊列中,直到任務隊列被充滿

任務隊列workQueue已充滿且正在運行的線程數a:a<maximumPoolSize,線程池立即創建非核心線程并執行任務;若有任務執行完畢,該任務將被線程池隊列中移除,線程池從隊列中取先入隊的任務執行;當線程處于空閑狀態的時間超過keepAliveTime時間時,正在運行的線程數acorePoolSize<a,線程池停止空閑的線程。線程池將任務執行完畢后,線程池會收縮到corePoolSize大小

任務隊列workQueue已充滿且正在運行的線程數a:a=maximumPoolSize,線程池拒絕執行該任務并拋出RejectExecutionException異常

淺談Java ThreadPoolExecutor的使用

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

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
一区二区三区在线观看动漫 | 久久综合九色综合欧美98 | 一本久道久久综合中文字幕| 亚洲激情亚洲| 欧美精品不卡| 亚洲国产精品一区| 久久久久欧美| 欧美日韩国产高清一区二区三区| 9191久久久久久久久久久| 欧美电影免费观看高清完整版| 欧美电影免费观看完整版| 国产亚洲欧洲一区高清在线观看| 日本一区二区三区dvd视频在线 | av激情综合网| 欧美国产三区| 亚洲午夜极品| 亚洲国产日韩欧美| 一区二区三区中文在线| 三级亚洲高清视频| 久久精品国产在热久久| 国产电影一区在线| 欧美一区激情| 夜夜嗨网站十八久久 | 亚洲日本在线看| 亚洲一区免费观看| 青青草原综合久久大伊人精品 | 国产丝袜欧美中文另类| 91色porny在线视频| 久久久久99精品一区| 99精品久久免费看蜜臀剧情介绍| 国产人成一区二区三区影院| 国产女人水真多18毛片18精品视频 | 男人的天堂亚洲| 在线不卡的av| 国产日韩在线不卡| 亚洲一区二区三区四区五区黄| 奇米在线7777在线精品| 成人激情动漫在线观看| 色综合色狠狠天天综合色| 日韩视频精品| 欧美日韩在线播放三区| 久久女同精品一区二区| www日韩大片| av不卡在线观看| 国产精品美女久久久久av爽李琼 | 国产精品影音先锋| 美国av一区二区| 欧美在线播放一区| 国产美女在线精品免费观看| 韩日欧美一区| 亚洲人xxxx| 久久精品成人一区二区三区蜜臀| 久久国产精品一区二区三区四区| 美女视频一区二区| 欧美一区午夜精品| 午夜精品999| 亚洲一区二区av在线| 欧美日韩午夜影院| 91美女精品福利| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 国产精品天美传媒| 99热在线精品观看| 秋霞影院一区二区| 精品久久一二三区| 亚洲另类黄色| 久久激五月天综合精品| 国产日韩欧美一区二区三区综合| 一区二区三区你懂的| 精品一区二区免费视频| 久久久精品黄色| 性娇小13――14欧美| 国产不卡视频在线播放| 亚洲天堂中文字幕| 欧美军同video69gay| 欧美国产先锋| 看电影不卡的网站| 久久久另类综合| 性色一区二区三区| 国产成人8x视频一区二区| 亚洲精品中文字幕乱码三区| 欧美福利视频导航| 亚洲国产片色| 国产传媒日韩欧美成人| 亚洲另类春色校园小说| 久久久久久97三级| 日本aⅴ亚洲精品中文乱码| 一区免费视频| 精品久久久久久久人人人人传媒| 天堂成人免费av电影一区| 欧美精品一区二区视频| 欧美一区二区网站| 一区二区三区在线免费视频 | 欧美日韩亚洲另类| 欧美不卡在线| 蜜桃av一区二区| 国产精品视频第一区| 欧美日韩高清一区| 亚洲日产国产精品| 国产精品一区二区三区四区| 一色屋精品亚洲香蕉网站| 7777精品伊人久久久大香线蕉经典版下载 | 国产精品视频观看| 欧美性猛交xxxxxx富婆| 欧美黄在线观看| 免费在线观看一区| 中文在线免费一区三区高中清不卡| 欧美色视频在线观看| 亚洲高清在线| www.欧美.com| 久久精品国产色蜜蜜麻豆| 亚洲视频1区2区| 欧美另类变人与禽xxxxx| 亚洲高清不卡| 国产 欧美在线| 婷婷夜色潮精品综合在线| 欧美国产禁国产网站cc| 欧美日韩国产a| 久久av一区| 欧美精品福利| 国产成人小视频| 久久午夜电影| 久久这里只有精品视频网| 成人亚洲精品久久久久软件| 日韩一区二区电影网| 国产成人免费视| 日韩片之四级片| 成人自拍视频在线观看| 欧美一级爆毛片| 成人午夜激情片| 日韩精品一区二区三区在线播放 | 性做久久久久久| 中文字幕不卡三区| 欧美精品1区2区3区| 久久福利影视| 激情久久综合| 本田岬高潮一区二区三区| 美脚の诱脚舐め脚责91 | 丁香天五香天堂综合| 日韩电影在线一区二区三区| 亚洲精品免费看| 中文字幕中文字幕在线一区| 精品av综合导航| 6080国产精品一区二区| 一本大道av伊人久久综合| 99riav国产精品| 91欧美一区二区| 风流少妇一区二区| 国产一区二区三区视频在线播放| 日韩精品视频网站| 亚洲va欧美va国产va天堂影院| 亚洲柠檬福利资源导航| 国产精品午夜免费| 国产夜色精品一区二区av| 欧美sm美女调教| 欧美一区二区在线视频| 欧美日韩夫妻久久| 欧美日韩精品欧美日韩精品| 欧洲人成人精品| 色88888久久久久久影院按摩| 性欧美xxxx大乳国产app| 99精品视频免费| 亚洲经典自拍| 亚洲欧洲精品一区二区三区波多野1战4 | 欧美日韩视频第一区| 色狠狠av一区二区三区| 免费亚洲网站| 欧美一级网站| 免费欧美日韩| 久久国产高清| 性娇小13――14欧美| 免费看的黄色欧美网站| 蜜桃av久久久亚洲精品| 久久久综合香蕉尹人综合网| 亚洲欧美日韩精品在线| 久久久久久亚洲精品杨幂换脸| 久久黄色影院| 老司机精品视频网站| 玖玖国产精品视频| 日本韩国欧美国产| 欧美伊人久久久久久久久影院| 欧美在线观看视频一区二区 | 免费欧美日韩| 久久久噜噜噜| 欧美三级中文字幕在线观看| 欧美日韩一级视频| 91精品国产综合久久精品麻豆| 91精品国产综合久久精品麻豆 | 激情综合亚洲| 99av国产精品欲麻豆| 另类图片国产| 亚洲成av人片在线| 老牛影视一区二区三区| 成人在线综合网| 国产精品国产三级国产三级人妇 | 亚洲国产精品国自产拍av| 色呦呦网站一区| 国产成人鲁色资源国产91色综| 成人免费观看视频| 1024亚洲合集| 色悠悠久久综合|