Java CyclicBarrier用法

CyclicBarrier用于阻塞多个已经启动的线程先后到达某个条件的时候,同时执行后续的操作。

public class CyclicBarrierTest {
    public static void main(String[] args) throws InterruptedException {
        new CyclicBarrierTest().go();
    }

    private void go() throws InterruptedException {
        // 初始化栅栏的参与者数为3
        CyclicBarrier cyclicBarrier = new CyclicBarrier(3);
        // 依次创建3个线程,并启动
        new Thread(new Task(cyclicBarrier), "Thread1").start();
        Thread.sleep(1000);
        new Thread(new Task(cyclicBarrier), "Thread2").start();
        Thread.sleep(1000);
        new Thread(new Task(cyclicBarrier), "Thread3").start();

    }

    class Task implements Runnable {
        private CyclicBarrier cyclicBarrier;

        public Task(CyclicBarrier cyclicBarrier) {
            this.cyclicBarrier = cyclicBarrier;
        }

        @Override
        public void run() {
            System.out.println("线程" + Thread.currentThread().getName() + "已经到达" + System.currentTimeMillis());
            try {
                cyclicBarrier.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (BrokenBarrierException e) {
                e.printStackTrace();
            }
            System.out.println("线程" + Thread.currentThread().getName() + "开始处理" + System.currentTimeMillis());
        }
    }
}

输出:

线程Thread1已经到达1488868149950
线程Thread2已经到达1488868150951
线程Thread3已经到达1488868151956
线程Thread3开始处理1488868151956
线程Thread1开始处理1488868151956
线程Thread2开始处理1488868151956

可见,线程1、2、3先后到达,到达的时间点为:1488868151956。在线程Thread3到达后,同时(1488868151956)执行各自的后续操作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、多线程 说明下线程的状态 java中的线程一共有 5 种状态。 NEW:这种情况指的是,通过 New 关键字创...
    Java旅行者阅读 4,729评论 0 44
  • Java-Review-Note——4.多线程 标签: JavaStudy PS:本来是分开三篇的,后来想想还是整...
    coder_pig阅读 1,673评论 2 17
  • layout: posttitle: 《Java并发编程的艺术》笔记categories: Javaexcerpt...
    xiaogmail阅读 5,864评论 1 19
  • Java SE 基础: 封装、继承、多态 封装: 概念:就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽...
    Jayden_Cao阅读 2,140评论 0 8
  • 作为一个团队的基层管理者,在评价自己下属的时候,在选择态度还是能力上,我会毫不犹豫地选择态度。 态度是魂,是核心,...
    温文思语阅读 509评论 0 0