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

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

java多線程CyclicBarrier的使用案例,讓線程起步走

瀏覽:49日期:2022-08-16 18:04:14
1、CyclicBarrier:

一個(gè)同步輔助類,用于協(xié)調(diào)多個(gè)子線程,讓多個(gè)子線程在這個(gè)屏障前等待,直到所有子線程都到達(dá)了這個(gè)屏障時(shí),再一起繼續(xù)執(zhí)行后面的動(dòng)作。

2、使用場景舉例:

年末公司組織團(tuán)建,要求每一位員工周六上午8點(diǎn)【自駕車】到公司門口集合,然后【自駕車】前往目的地。

在這個(gè)案例中,公司作為主線程,員工作為子線程。

3、代碼示例:

package com.test.spring.support;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CountDownLatch;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;/** * @author javaloveiphone * @date 創(chuàng)建時(shí)間:2017年1月25日 上午10:59:11 * @Description: */public class Company { public static void main(String[] args) throws InterruptedException { //員工數(shù)量 int count = 5; //創(chuàng)建計(jì)數(shù)器 CyclicBarrier barrier = new CyclicBarrier(count+1); //創(chuàng)建線程池,可以通過以下方式創(chuàng)建 //ThreadPoolExecutor threadPool = new ThreadPoolExecutor(1,1,60,TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>(count)); ExecutorService threadPool = Executors.newFixedThreadPool(count); System.out.println('公司發(fā)送通知,每一位員工在周六早上8點(diǎn)【自駕車】到公司大門口集合'); for(int i =0;i<count ;i++){ //將子線程添加進(jìn)線程池執(zhí)行 threadPool.execute(new Employee(barrier,i+1)); Thread.sleep(10); } try { //阻塞當(dāng)前線程,直到所有員工到達(dá)公司大門口之后才執(zhí)行 barrier.await(); Thread.sleep(10); // 使當(dāng)前線程在鎖存器倒計(jì)數(shù)至零之前一直等待,除非線程被中斷或超出了指定的等待時(shí)間。 //latch.await(long timeout, TimeUnit unit) System.out.println('所有員工已經(jīng)到達(dá)公司大門口,公司領(lǐng)導(dǎo)一并【自駕車】同員工前往活動(dòng)目的地。'); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); }finally{ //最后關(guān)閉線程池,但執(zhí)行以前提交的任務(wù),不接受新任務(wù) threadPool.shutdown(); //關(guān)閉線程池,停止所有正在執(zhí)行的活動(dòng)任務(wù),暫停處理正在等待的任務(wù),并返回等待執(zhí)行的任務(wù)列表。 //threadPool.shutdownNow(); } }}//分布式工作線程class Employee implements Runnable{ private CyclicBarrier barrier; private int employeeIndex; public Employee(CyclicBarrier barrier,int employeeIndex){ this.barrier = barrier; this.employeeIndex = employeeIndex; } @Override public void run() { try { System.out.println('員工:'+employeeIndex+',正在前往公司大門口集合...'); Thread.sleep(10*employeeIndex); System.out.println('員工:'+employeeIndex+',已到達(dá)。'); barrier.await(); Thread.sleep(10); System.out.println('員工:'+employeeIndex+',【自駕車】前往目的地'); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } }}

打印輸出可能的結(jié)果:

公司發(fā)送通知,每一位員工在周六早上8點(diǎn)【自駕車】到公司大門口集合員工:1,正在前往公司大門口集合...員工:1,已到達(dá)。員工:2,正在前往公司大門口集合...員工:3,正在前往公司大門口集合...員工:2,已到達(dá)。員工:4,正在前往公司大門口集合...員工:5,正在前往公司大門口集合...員工:3,已到達(dá)。員工:4,已到達(dá)。員工:5,已到達(dá)。員工:3,【自駕車】前往目的地員工:5,【自駕車】前往目的地所有員工已經(jīng)到達(dá)公司大門口,公司領(lǐng)導(dǎo)一并【自駕車】同員工前往活動(dòng)目的地。員工:4,【自駕車】前往目的地員工:1,【自駕車】前往目的地員工:2,【自駕車】前往目的地注意:

子線程執(zhí)行了await()方法,必須等待其它所有子線程執(zhí)行await()方法之后,才能一起繼續(xù)后續(xù)的(await后main的)工作,就像上面的例子,所有自駕車必須都到達(dá)公司大門口之后,才能一起繼續(xù)各自自駕車前往目的地。

但,主線程await()之后的工作與子線程await()之后的工作是不受影響的,只要所有的子線程執(zhí)行了await()方法,主線程此時(shí)就可以后續(xù)的工作了,不必管子線程await()方法后續(xù)工作的情況。

4、CyclicBarrier與CountDownLatch的區(qū)別:

1)、構(gòu)造兩者對象傳入的參數(shù)不一樣:構(gòu)造CyclicBarrier比構(gòu)造CountDownLatch的參數(shù)大了1,原因是構(gòu)造CyclicBarrier的數(shù)量表示的是調(diào)用await()的次數(shù),構(gòu)造CountDownLatch的數(shù)量表示的是調(diào)用countDown()的次數(shù);

2)、子線程調(diào)用了barrier.await()之后,必須等待所有子線程都完成barrier.await()調(diào)用后才能一起繼續(xù)后續(xù)自己的工作,而子線程調(diào)用latch.countDown()之后,會(huì)繼續(xù)子線程自己的工作,不用等待其它子線程latch.countDown()調(diào)用情況。

3)、CyclicBarrier可以循環(huán)使用,而CountDownLatch不是循環(huán)使用的。

4)、程序?qū)Ρ瓤梢钥矗簀ava多線程CountDownLatch及線程池ThreadPoolExecutor/ExecutorService使用案例

補(bǔ)充:CyclicBarrier的使用,多線程’同時(shí)’啟動(dòng)

我就廢話不多說了,大家還是直接看代碼吧~

package com.noway.test.concurrent.cyclicBarrier;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;/** * 多線程中如何’同時(shí)’啟動(dòng)多個(gè)線程 * @author Noway * */public class TestCyclicBarrier { public static void main(String[] args) { CyclicBarrier cb = new CyclicBarrier(3); new Thread(new cbThread(cb,'張三')).start(); new Thread(new cbThread(cb,'李四')).start(); new Thread(new cbThread(cb,'王五')).start(); new Thread(new cbThread(cb,'馬六')).start(); new Thread(new cbThread(cb,'小七')).start(); }}class cbThread implements Runnable{ private CyclicBarrier cb; private String name; public cbThread(CyclicBarrier cb, String name) { super(); this.cb = cb; this.name = name; } @Override public void run() { System.out.println(this.name+'準(zhǔn)備好了...'); try { this.cb.await();//形成一個(gè)屏障 } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } System.out.println(this.name+'出發(fā)了...'); }}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

標(biāo)簽: Java
主站蜘蛛池模板: 智能电表|预付费ic卡水电表|nb智能无线远传载波电表-福建百悦信息科技有限公司 | 【ph计】|在线ph计|工业ph计|ph计厂家|ph计价格|酸度计生产厂家_武汉吉尔德科技有限公司 | 防水套管厂家-柔性防水套管-不锈钢|刚性防水套管-天翔管道 | 无硅导热垫片-碳纤维导热垫片-导热相变材料厂家-东莞市盛元新材料科技有限公司 | 上海心叶港澳台联考一对一培训_上海心叶港澳台联考,港澳台联考一对一升学指导 | 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 上海深蓝_缠绕机_缠膜机-上海深蓝机械装备有限公司 | 代理记账_免费注册公司_营业执照代办_资质代办-【乐财汇】 | 铝单板_铝窗花_铝单板厂家_氟碳包柱铝单板批发价格-佛山科阳金属 | 酒万铺-酒水招商-酒水代理 | 钣金加工厂家-钣金加工-佛山钣金厂-月汇好 | 合肥抖音SEO网站优化-网站建设-网络推广营销公司-百度爱采购-安徽企匠科技 | 芝麻黑-芝麻黑石材厂家-永峰石业 | 自清洗过滤器-全自动自清洗过反冲洗过滤器 - 中乂(北京)科技有限公司 | 丁基胶边来料加工,医用活塞边角料加工,异戊二烯橡胶边来料加工-河北盛唐橡胶制品有限公司 | 螺杆真空泵_耐腐蚀螺杆真空泵_水环真空泵_真空机组_烟台真空泵-烟台斯凯威真空 | 叉车电池-叉车电瓶-叉车蓄电池-铅酸蓄电池-电动叉车蓄电池生产厂家 | 中国产业发展研究网 - 提供行业研究报告 可行性研究报告 投资咨询 市场调研服务 | 洛阳永磁工业大吊扇研发生产-工厂通风降温解决方案提供商-中实洛阳环境科技有限公司 | 青岛成人高考_山东成考报名网 | 猪I型/II型胶原-五克隆合剂-细胞冻存培养基-北京博蕾德科技发展有限公司 | 锂电叉车,电动叉车_厂家-山东博峻智能科技有限公司 | 扫地车厂家-山西洗地机-太原电动扫地车「大同朔州吕梁晋中忻州长治晋城洗地机」山西锦力环保科技有限公司 | 注浆压力变送器-高温熔体传感器-矿用压力传感器|ZHYQ朝辉 | TTCMS自助建站_网站建设_自助建站_免费网站_免费建站_天天向上旗下品牌 | 隔离变压器-伺服变压器--输入输出电抗器-深圳市德而沃电气有限公司 | 空气能采暖,热泵烘干机,空气源热水机组|设备|厂家,东莞高温热泵_正旭新能源 | 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | 压接机|高精度压接机|手动压接机|昆明可耐特科技有限公司[官网] 胶泥瓷砖胶,轻质粉刷石膏,嵌缝石膏厂家,腻子粉批发,永康家德兴,永康市家德兴建材厂 | MES系统-WMS系统-MES定制开发-制造执行MES解决方案-罗浮云计算 | 特种电缆厂家-硅橡胶耐高温电缆-耐低温补偿导线-安徽万邦特种电缆有限公司 | 菲希尔FISCHER测厚仪-铁素体检测仪-上海吉馨实业发展有限公司 | 贵阳用友软件,贵州财务软件,贵阳ERP软件_贵州优智信息技术有限公司 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | X光检测仪_食品金属异物检测机_X射线检测设备_微现检测 | 没斑啦-专业的祛斑美白嫩肤知识网站-去斑经验分享 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 照相馆预约系统,微信公众号摄影门店系统,影楼管理软件-盟百网络 | 厦门ISO认证|厦门ISO9001认证|厦门ISO14001认证|厦门ISO45001认证-艾索咨询专注ISO认证行业 | 双工位钻铣攻牙机-转换工作台钻攻中心-钻铣攻牙机一体机-浙江利硕自动化设备有限公司 | 深圳市超时尚职业培训学校,培训:月嫂,育婴,养老,家政;化妆,美容,美发,美甲. |