JUC练习代码-CyclicBarrier的简单用法

public class CyclicBarrierTest {


    public static void main(String[] args) {
        CyclicBarrier cyclicBarrier=new CyclicBarrier(7,()->{
            System.out.println("导游:大家都到齐啦,准备上车");
        });
        for (int i = 0; i <7; i++) {
            new Thread(()->{
                System.out.println(Thread.currentThread().getName()+"已经到了");
                try {
                    cyclicBarrier.await();
                    System.out.println(Thread.currentThread().getName()+"我已经上车啦");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }

            }).start();
        }
    }
}

打印结果:

Thread-0已经到了
Thread-1已经到了
Thread-3已经到了
Thread-4已经到了
Thread-5已经到了
Thread-2已经到了
Thread-6已经到了
导游:大家都到齐啦,准备上车
Thread-6我已经上车啦
Thread-0我已经上车啦
Thread-1我已经上车啦
Thread-3我已经上车啦
Thread-4我已经上车啦
Thread-5我已经上车啦
Thread-2我已经上车啦

有兴趣的可以查看下源码,看看为什么是导游语句先打印,线程上车语句后打印的。

你可能感兴趣的:(高并发多线程(Java提升篇))