CyclicBarrier

来源:互联网 发布:求职简历邮件正文知乎 编辑:程序博客网 时间:2024/06/06 16:37

CyclicBarrier的await方法会阻塞当前线程,只有当被阻塞的线程数达到了CyclicBarrier初始化的线程数时,才会同一时间唤醒所有线程。


1、需要一个任务类

public class CyclicBarrierTask implements Runnable {    private CyclicBarrier cyclicBarrier;    private String name;    private long rest;    public CyclicBarrierTask(CyclicBarrier cyclicBarrier, String name, long rest) {        this.cyclicBarrier = cyclicBarrier;        this.name = name;        this.rest = rest;    }    @Override    public void run() {        try {            Thread.sleep(rest);            cyclicBarrier.await();        } catch (InterruptedException e) {            e.printStackTrace();        } catch (BrokenBarrierException e) {            e.printStackTrace();        }        System.out.println("我是" + name + ", 当前时间" + System.currentTimeMillis());    }}


2、输出看看

public class CyclicBarrierClient {    public static void main(String[] args) {        CyclicBarrier barrier = new CyclicBarrier(4);        new Thread(new CyclicBarrierTask(barrier, "张三", 2000)).start();        new Thread(new CyclicBarrierTask(barrier, "李四", 3000)).start();        new Thread(new CyclicBarrierTask(barrier, "王五", 1000)).start();        new Thread(new CyclicBarrierTask(barrier, "刘二", 6000)).start();    }}

我是刘二, 当前时间1506274029403
我是王五, 当前时间1506274029403
我是张三, 当前时间1506274029404
我是李四, 当前时间1506274029404