import java.util.concurrent.*;
public class CyclicBarrierDemo {
public static void main(String[] args) {
CyclicBarrier cyclicBarrier = new CyclicBarrier(3);
CyclicBarrierRunnable runnable1 = new CyclicBarrierRunnable(cyclicBarrier);
CyclicBarrierRunnable runnable2 = new CyclicBarrierRunnable(cyclicBarrier);
CyclicBarrierRunnable runnable3 = new CyclicBarrierRunnable(cyclicBarrier);
new Thread(runnable1).start();
new Thread(runnable2).start();
new Thread(runnable3).start();
System.out.println("Main out.");
}
static class CyclicBarrierRunnable implements Runnable {
private CyclicBarrier cyclicBarrier;
public CyclicBarrierRunnable(CyclicBarrier cyclicBarrier) {
this.cyclicBarrier = cyclicBarrier;
}
@Override
public void run() {
try {
System.out.println("cyclicBarrier in.");
Thread.sleep(5000);
cyclicBarrier.await();
System.out.println("cyclicBarrier out.");
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}
}
}