首页 > 科技 >

✨ CyclicBarrier 使用详解_cyclicbarrier用法 ✨

发布时间:2025-03-01 13:40:16来源:

🚀 在多线程编程中,有时我们需要确保多个线程在某个点上同步,以便它们能够继续执行。这时,`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`。

免责声明:本答案或内容为用户上传,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。 如遇侵权请及时联系本站删除。