电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

淺談Java ThreadPoolExecutor的使用

瀏覽:6日期: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ù)對(duì)列中任務(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)申請(qǐ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)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 齿轮减速电机一体机_蜗轮蜗杆减速马达-德国BOSERL齿轮减速机带电机生产厂家 | 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 缠绕机|缠绕膜包装机|缠绕包装机-上海晏陵智能设备有限公司 | 智能家居全屋智能系统多少钱一套-小米全套价格、装修方案 | 众品地板网-地板品牌招商_地板装修设计_地板门户的首选网络媒体。 | 断桥铝破碎机_铝合金破碎机_废铁金属破碎机-河南鑫世昌机械制造有限公司 | 创绿家招商加盟网-除甲醛加盟-甲醛治理加盟-室内除甲醛加盟-创绿家招商官网 | 吲哚菁绿衍生物-酶底物法大肠菌群检测试剂-北京和信同通科技发展有限公司 | 电主轴-高速精密电主轴-高速电机厂家-瑞德沃斯品牌有限公司 | 彩超机-黑白B超机-便携兽用B超机-多普勒彩超机价格「大为彩超」厂家 | 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 冷库安装厂家_杭州冷库_保鲜库建设-浙江克冷制冷设备有限公司 | 铝单板_铝窗花_铝单板厂家_氟碳包柱铝单板批发价格-佛山科阳金属 | 电动百叶窗,开窗器,电动遮阳百叶,电动开窗机生产厂家-徐州鑫友工控科技发展有限公司 | 济南展厅设计施工_数字化展厅策划设计施工公司_山东锐尚文化传播有限公司 | 环保袋,无纺布袋,无纺布打孔袋,保温袋,环保袋定制,环保袋厂家,环雅包装-十七年环保袋定制厂家 | 激光内雕_led玻璃_发光玻璃_内雕玻璃_导光玻璃-石家庄明晨三维科技有限公司 激光内雕-内雕玻璃-发光玻璃 | 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | 网站建设-网站制作-网站设计-网站开发定制公司-网站SEO优化推广-咏熠软件 | 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 聚合氯化铝_喷雾聚氯化铝_聚合氯化铝铁厂家_郑州亿升化工有限公司 | 爆破器材运输车|烟花爆竹运输车|1-9类危险品厢式运输车|湖北江南专用特种汽车有限公司 | 双杰天平-国产双杰电子天平-美国双杰-常熟双杰仪器 | 云南成考网_云南成人高考报名网 粤丰硕水性环氧地坪漆-防静电自流平厂家-环保地坪涂料代理 | 橡胶接头|可曲挠橡胶接头|橡胶软接头安装使用教程-上海松夏官方网站 | 南京和瑞包装有限公司| 菏泽知彼网络科技有限公司 | 济南品牌包装设计公司_济南VI标志设计公司_山东锐尚文化传播 | 湖州织里童装_女童男童中大童装_款式多尺码全_织里儿童网【官网】-嘉兴嘉乐网络科技有限公司 | Brotu | 关注AI,Web3.0,VR/AR,GPT,元宇宙区块链数字产业 | 压片机_高速_单冲_双层_花篮式_多功能旋转压片机-上海天九压片机厂家 | 稳尚教育加盟-打造高考志愿填报平台_新高考志愿填报加盟_学业生涯规划加盟 | 应急灯_消防应急灯_应急照明灯_应急灯厂家-大成智慧官网 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 超声波清洗机_细胞破碎仪_实验室超声仪器_恒温水浴-广东洁盟深那仪器 | 深圳市宏康仪器科技有限公司-模拟高空低压试验箱-高温防爆试验箱-温控短路试验箱【官网】 | 超声骨密度仪-动脉硬化检测仪器-人体成分分析仪厂家/品牌/价格_南京科力悦 | 半自动预灌装机,卡式瓶灌装机,注射器灌装机,给药器灌装机,大输液灌装机,西林瓶灌装机-长沙一星制药机械有限公司 | 工业rfid读写器_RFID工业读写器_工业rfid设备厂商-ANDEAWELL | 花纹铝板,合金铝卷板,阴极铝板-济南恒诚铝业有限公司 | 玻璃钢型材-玻璃钢风管-玻璃钢管道,生产厂家-[江苏欧升玻璃钢制造有限公司] |