博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 多线程协调工具 CyclicBarrier 与CountDownLatch 学习
阅读量:6157 次
发布时间:2019-06-21

本文共 3799 字,大约阅读时间需要 12 分钟。

hot3.png

CyclicBarrier

import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CountDownLatch;import java.util.concurrent.CyclicBarrier;/** * 文件功能:CyclicBarrier 多线程线程协调辅助工具 * 故事,一个班5个士兵同时端枪射击 * Created */public class CyclicBarrierSample {    static CyclicBarrier cyclBr=new CyclicBarrier(5, new Runnable() {        @Override        public void run() {            System.out.println("听班长口令,开始射击----");        }    });      public static void  main(String args[]){        for(int i=0;i<=4;i++){          new MyThread2("A班士兵"+i,cyclBr).start();        }        try {            Thread.sleep(1000);        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println("B班开始准备射击(重复使用CyclicBarrier)************");        for(int i=0;i<=4;i++){            new MyThread2("B班士兵"+i,cyclBr).start();        }    }}class MyThread2 extends Thread{    CyclicBarrier cyclBr;    public MyThread2(String name,CyclicBarrier cyclBr){        super(name);        this.cyclBr=cyclBr;    }    public void run()    {        System.out.println(Thread.currentThread().getName()+"端枪,准备好..." );        try {            cyclBr.await();        } catch (InterruptedException e) {            e.printStackTrace();        } catch (BrokenBarrierException e) {            e.printStackTrace();        }        System.out.println(Thread.currentThread().getName()+"射击>>>>>>");    }}

预期输出:

A班士兵1端枪,准备好...

A班士兵2端枪,准备好...
A班士兵3端枪,准备好...
A班士兵0端枪,准备好...
A班士兵4端枪,准备好...
听班长口令,开始射击----
A班士兵4射击>>>>>>
A班士兵1射击>>>>>>
A班士兵2射击>>>>>>
A班士兵3射击>>>>>>
A班士兵0射击>>>>>>
B班开始准备射击(重复使用CyclicBarrier)************
B班士兵0端枪,准备好...
B班士兵2端枪,准备好...
B班士兵4端枪,准备好...
B班士兵3端枪,准备好...
B班士兵1端枪,准备好...
听班长口令,开始射击----
B班士兵1射击>>>>>>
B班士兵0射击>>>>>>
B班士兵2射击>>>>>>
B班士兵4射击>>>>>>
B班士兵3射击>>>>>>

CountDownLatch

import java.util.Random;import java.util.concurrent.CountDownLatch;/** * 文件功能:CountDownLatch 多线程计数同步工具 * Created * 故事,一个班里5个兵紧急集合。 * 模拟 集合时间统计。 */public class CountDownLatchSample {    static CountDownLatch bugleCall=new CountDownLatch(1);//吹响集结号    static CountDownLatch assemblied=new CountDownLatch(5);//集结完毕    public static void main(String[] args){        for(int i=0;i<5;i++){            new Thread(new Soldier("士兵"+i,bugleCall,assemblied)).start();            try {                Thread.sleep(1000);//等1s都睡下了吧            } catch (InterruptedException e) {                e.printStackTrace();            }        }        System.out.println("班长吹响集结号--------------");        Long startTime=System.currentTimeMillis();        bugleCall.countDown();        try {            assemblied.await();            System.out.println("集结完毕,本次集结耗时:【"+(System.currentTimeMillis()-startTime)/1000+"】秒。");        } catch (InterruptedException e) {            e.printStackTrace();        }    }}class  Soldier implements  Runnable{         CountDownLatch listen;//听号声集合         CountDownLatch report;//集结完毕,报告         String name;        public Soldier(String name,CountDownLatch listen,CountDownLatch report){            this.listen=listen;            this.name=name;            this.report=report;        }    @Override    public void run() {        try {            System.out.println(this.name + "正在做美梦。。。");            listen.await();            System.out.println(this.name + "听到号声,开始起床集合。");            Thread.sleep(new Random().nextInt(5000));//随机延时5秒引内            System.out.println(this.name + "集合完毕。");        } catch (InterruptedException e) {            e.printStackTrace();        }finally {            report.countDown();        }    }}

预期输出:

士兵0正在做美梦。。。

士兵1正在做美梦。。。
士兵2正在做美梦。。。
士兵3正在做美梦。。。
士兵4正在做美梦。。。
班长吹响集结号--------------
士兵0听到号声,开始起床集合。
士兵3听到号声,开始起床集合。
士兵2听到号声,开始起床集合。
士兵1听到号声,开始起床集合。
士兵4听到号声,开始起床集合。
士兵3集合完毕。
士兵0集合完毕。
士兵4集合完毕。
士兵2集合完毕。
士兵1集合完毕。
集结完毕,本次集结耗时:【2】秒。

转载于:https://my.oschina.net/u/146130/blog/843445

你可能感兴趣的文章
MFC控件的SubclassDlgItem
查看>>
如何避免历史回退到登录页面
查看>>
《图解HTTP》1~53Page Web网络基础 HTTP协议 HTTP报文内的HTTP信息
查看>>
unix环境高级编程-高级IO(2)
查看>>
树莓派是如何免疫 Meltdown 和 Spectre 漏洞的
查看>>
雅虎瓦片地图切片问题
查看>>
HTML 邮件链接,超链接发邮件
查看>>
HDU 5524:Subtrees
查看>>
手机端userAgent
查看>>
pip安装Mysql-python报错EnvironmentError: mysql_config not found
查看>>
http协议组成(请求状态码)
查看>>
怎样成为一个高手观后感
查看>>
[转]VC预处理指令与宏定义的妙用
查看>>
MySql操作
查看>>
python 解析 XML文件
查看>>
MySQL 文件导入出错
查看>>
java相关
查看>>
由一个异常开始思考springmvc参数解析
查看>>
向上扩展型SSD 将可满足向外扩展需求
查看>>
虚机不能启动的特例思考
查看>>