CyclicBarrier 高并发的使用

来源:互联网 发布:htcg5软件 编辑:程序博客网 时间:2024/05/16 15:57

CyclicBarrier是Java中java.util.concurrent并发包里的一个工具类。作用就是控制多个线程同时等待某个事件的执行才会一起执行。

使用场景:多用于多个子线程等待主线程执行完毕后执行的场景。

两个重要构造方法:

new CyclicBarrier(intint为等待的线程的个数。 new CyclicBarrier(int,Runnable)Runnable为等待的线程被触发时,优先执行的线程。 

主要api

await(),用于作用于线程等待,每执行一次await()方法int数减一,直到int减为0时,所有等待的线程将被触发执行。

实例模仿CyclicBarrier使用

package test;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import org.junit.Test;public class TestCyclicBarrier implements Runnable{    CyclicBarrier barrier = new CyclicBarrier(4,this);    ExecutorService service = Executors.newCachedThreadPool();    @Test    public void test(){        service.submit(new Student1(barrier));        service.submit(new Student2(barrier));        service.submit(new Student3(barrier));        service.submit(new School(barrier));    }    public void run() {        System.out.println("老师提出问题!");    }    class Student1 implements Runnable{        CyclicBarrier barrier;        public void run() {            try {                barrier.await();                System.out.println("学生1抢答问题!");            }catch (Exception e) {                e.printStackTrace();            }        }        Student1(CyclicBarrier barrier){            this.barrier=barrier;        }    }    class Student2 implements Runnable{        CyclicBarrier barrier;        public void run() {            try {                barrier.await();                System.out.println("学生2抢答问题!");            }catch (Exception e) {                e.printStackTrace();            }        }        Student2(CyclicBarrier barrier){            this.barrier=barrier;        }    }   class Student3 implements Runnable{        CyclicBarrier barrier;        public void run() {            try {                barrier.await();                System.out.println("学生3抢答问题!");            }catch (Exception e) {                e.printStackTrace();            }        }        Student3(CyclicBarrier barrier){            this.barrier=barrier;        }    }   class School implements Runnable{        CyclicBarrier barrier;        public void run() {            try {                System.out.println("上课铃响");                barrier.await();            }catch (Exception e) {                e.printStackTrace();            }        }        School(CyclicBarrier barrier){            this.barrier=barrier;        }    }}

运行结果:
这里写图片描述

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机日历删除了怎么办 华为mate9掉了怎么办 华为手机屏幕开胶了怎么办 技嘉主板坏了怎么办 手机无线信号差怎么办 华为手电筒不亮怎么办 华为手机呼吸灯不亮怎么办 华为碎屏失灵怎么办 移动4g网卡怎么办 华为mate8相机打不开怎么办 手机突然耗电快怎么办 oppo手机耗电快怎么办 华为p20发热严重怎么办 红米锁屏壁纸换不了怎么办 没有苹果充电线怎么办 华为荣耀v9微信锁屏就断网怎么办 苹果手机长亮怎么办 kindle重启死机怎么办 华为手机桌面图标不见了怎么办 荣耀v9play好卡怎么办 p20触屏不灵敏怎么办 华为m2平板黑屏怎么办 金立f5跳屏怎么办 玩手机屏幕汗多怎么办 华为p10振动小怎么办 荣耀十容易热怎么办 华为note3振动弱怎么办 数据线不是快充怎么办 银行卡压弯了怎么办 信用卡晒弯了怎么办 银行卡晒变形了怎么办 手机壳为有毒怎么办 华为手机经常卡怎么办 华为nova3e卡顿怎么办 华为p8桌面图标不见了怎么办 mate9图片删掉了怎么办 手机信号变成了g怎么办 华为手机保密柜打不开怎么办 华为sd卡受损怎么办 qqsd卡不可用怎么办 荣耀v10玩游戏卡怎么办