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我已经上车啦
有兴趣的可以查看下源码,看看为什么是导游语句先打印,线程上车语句后打印的。