线程同步工具:CyclicBarrier

它允许一组线程互相等待,直到这些线程都到达某个公共屏障点。然后这些线程公平地从这个起点开始工作。我们通过赛跑来理解。
在一个由三个选手的赛跑中,在正式起跑前,大家都准备好了才能开始,在此之前,大家都需要等待对方。
 
public static void main(String[] a){
        final CyclicBarrier cyclicBarrier=new CyclicBarrier(3);//初始化,表示有3个选手参加赛跑

        for(int i=0;i<3;i++){
            final int t=i+1;
            new Thread(new Runnable() {
                @Override
                public void run() {

                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(t + " 号选手准备好了...");
                    try {
                        cyclicBarrier.await();   //我准备好了,但其他人都准备好之前要一直等待
                        System.out.println(t + " 号选手开跑");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    } catch (BrokenBarrierException e) {
                        e.printStackTrace();
                    }

                }
            }).start();
        }

    }
运行结果:
2 号选手准备好了...
3 号选手准备好了...
1 号选手准备好了...
1 号选手开跑
2 号选手开跑
3 号选手开跑
如果将cyclicBarrier设为4,那么其他人会一直等,不信你试试。

===========================================================================
关注微信公众号 “Java技术”,可以实时获取有价值的技术文章推送。
"Java技术"交流群:  245130488  

"Java软件工程师培训"系列课程正式推出,助你自学成才,进入IT行业。

www.chuanke.com/s3377987.html
 本文用 菊子曰发布

你可能感兴趣的:(线程同步工具:CyclicBarrier)