CyclicBarrier
是 Java 并发包中的一个同步工具类,用于在多个线程之间创建同步点,只有当所有线程都达到同步点时,才能继续执行后续操作。
使用 CyclicBarrier
需要以下步骤:
- 创建
CyclicBarrier
对象:通过指定需要等待的线程数量和在所有线程都达到同步点时要执行的操作来初始化CyclicBarrier
对象。CyclicBarrier barrier = new CyclicBarrier(count, () -> { // 在所有线程都达到同步点时要执行的操作 });
- 每个线程执行任务并等待:在每个线程需要等待其他线程的地方,调用
await()
方法使当前线程进入等待状态,直到所有线程都达到同步点。barrier.await(); // 当前线程等待其他线程
简单示例:
public class CyclicBarrierDemo {
public static void main(String[] args) {
/*
*集齐7颗龙珠召唤神龙
*/
// 召唤龙珠的线程
CyclicBarrier cyclicBarrier = new CyclicBarrier(7, () -> {
System.out.println("召唤神龙成功!");
});
for (int i = 1; i <= 7; i++) {
int finalI = i;
new Thread(() -> {
System.out.println(Thread.currentThread().getName() + "收集" + finalI + "号龙珠");
try {
cyclicBarrier.await(); // 等待 catch (InterruptedException e)
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}).start();
}
}
}
总结:CyclicBarrier
可以用于创建同步点,使多个线程相互等待,只有当所有线程都达到同步点时,才能继续执行后续操作。它可以用于解决并发任务中的协调问题,例如需要等到多个线程完成某些操作后才能进行下一步操作。