✨ CyclicBarrier 使用详解_cyclicbarrier用法 ✨
🚀 在多线程编程中,有时我们需要确保多个线程在某个点上同步,以便它们能够继续执行。这时,`CyclicBarrier` 就显得尤为有用。它允许一组线程互相等待,直到所有线程都到达一个共同的屏障点。一旦所有线程都到达该点,屏障就会打开,所有等待的线程都可以继续执行。
🛠️ `CyclicBarrier` 的构造函数接受两个参数:参与同步的线程数量和一个可选的 `Runnable` 任务。当所有线程到达屏障时,`Runnable` 会被执行。这使得我们可以利用这个机会进行一些清理工作或状态更新。
🎯 创建一个 `CyclicBarrier` 实例后,每个线程需要调用 `await()` 方法来表示自己已经到达屏障。如果所有线程都已经到达,则屏障打开;否则,线程会阻塞,直到其他线程也到达。
🔄 与 `CountDownLatch` 不同,`CyclicBarrier` 是可重用的。这意味着一旦屏障打开,它可以被重置并再次使用,而不需要重新创建。
🔧 下面是一个简单的示例,展示了如何使用 `CyclicBarrier` 来同步两个线程:
```java
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class BarrierExample {
public static void main(String[] args) {
CyclicBarrier barrier = new CyclicBarrier(2, () -> System.out.println("屏障已打开!"));
Thread thread1 = new Thread(() -> {
try {
System.out.println("线程1正在等待...");
barrier.await();
System.out.println("线程1继续执行");
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
});
Thread thread2 = new Thread(() -> {
try {
System.out.println("线程2正在等待...");
barrier.await();
System.out.println("线程2继续执行");
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
});
thread1.start();
thread2.start();
}
}
```
🔍 通过这个例子,你可以看到如何使用 `CyclicBarrier` 来同步两个线程,并且在屏障打开时执行额外的任务。希望这篇简短的介绍能帮助你更好地理解和使用 `CyclicBarrier`。
免责声明:本答案或内容为用户上传,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。 如遇侵权请及时联系本站删除。