CyclicBarrier
February 3, 2023Less than 1 minute
CyclicBarrier
概念
循环栅栏
作用
CyclicBarrier
的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是:让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。
方法
构造方法中,传入“目标障碍数”,达到目标障碍数后执行的线程
await 方法,可以理解为加 1 操作,同时阻塞该线程
例子
集齐 7 颗龙珠就可以召唤神龙
private static final int NUMBER = 7;
public static void main(String[] args) {
CyclicBarrier cyclicBarrier = new CyclicBarrier(NUMBER, () -> {
System.out.println("召唤神龙");
});
for (int i = 0; i < 7; i++) {
new Thread(() -> {
try {
System.out.println(Thread.currentThread().getName() + "星龙珠被收集到了");
cyclicBarrier.await();
System.out.println(Thread.currentThread().getName() + "星龙珠被使用完毕");
} catch (Exception e) {
throw new RuntimeException(e);
}
}, String.valueOf(i + 1)).start();
}
}