CyclicBarrier默认的构造方法是CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程调用await方法告诉CyclicBarrier我已经到达了屏障,然后当前线程被阻塞。
public class Demo_07_02_1_CylicBarrier {
public static void main(String[] args) throws BrokenBarrierException, InterruptedException {
CyclicBarrier cyclicBarrier = new CyclicBarrier(2);
new Thread(() -> {
for (int i = 0; i < 5; i++) {
if (i == 3) {
try {
cyclicBarrier.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"----"+i);
}
}).start();
for (int i = 0; i < 5; i++) {
if (i == 2) {
cyclicBarrier.await();
}
System.out.println(Thread.currentThread().getName()+"----"+i);
}
}
}
// 输出如下:
// main----0
// main----1
// Thread-0----0
// Thread-0----1
// Thread-0----2
// main----2
// main----3
// main----4
// Thread-0----3
// Thread-0----4
// 可能不一样,但是main----1输出后一定会等到Thread---2输出后main才会继续