importjava.util.Random;importjava.util.concurrent.BrokenBarrierException;importjava.util.concurrent.CyclicBarrier;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;public classCyclicBarrierTest {public static voidmain(String[] args) {
ExecutorService newCachedThreadPool=Executors.newCachedThreadPool();final CyclicBarrier cyclicBarrier = new CyclicBarrier(3);for (int i = 0; i < 3; i++) {
Runnable runnable= newRunnable() {
@Overridepublic voidrun() {try{
Thread.sleep(new Random().nextInt(10000));
System.out.println("线程"+Thread.currentThread().getName()+"即将到达1,当前已有"+(cyclicBarrier.getNumberWaiting()+1)+"已经到达"+(cyclicBarrier.getNumberWaiting()==2?"都到齐了,继续走":"正在等待"));
cyclicBarrier.await();
Thread.sleep(new Random().nextInt(10000));
System.out.println("线程"+Thread.currentThread().getName()+"即将到达2, 当前已有"+(cyclicBarrier.getNumberWaiting()+1)+"已经到达"+(cyclicBarrier.getNumberWaiting()==2?"都到齐了,继续走":"正在等待"));
cyclicBarrier.await();
Thread.sleep(new Random().nextInt(10000));
System.out.println("线程"+Thread.currentThread().getName()+"即将到达3, 当前已有"+(cyclicBarrier.getNumberWaiting()+1)+"已经到达"+(cyclicBarrier.getNumberWaiting()==2?"都到齐了,继续走":"正在等待"));
cyclicBarrier.await();
}catch(InterruptedException e) {
e.printStackTrace();
}catch(BrokenBarrierException e) {
e.printStackTrace();
}
}
};
newCachedThreadPool.execute(runnable);
}
newCachedThreadPool.shutdown();//执行完成后关闭线程池
}
}