A CyclicBarrier 是一种同步辅助工具,允许一组线程相互等待到达公共屏障点。一旦所有线程到达屏障,它们就会被释放以继续工作。屏障被称为“循环”,因为它可以在等待线程被释放后被重用。
为了更好地理解 CyclicBarrier 的工作原理,让我们看一个实际的示例和演示。
这是一个简单的示例,演示了 CyclicBarrier 的使用:
import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; public class CyclicBarrierDemo { public static void main(String[] args) { final int numberOfThreads = 3; CyclicBarrier barrier = new CyclicBarrier(numberOfThreads, new BarrierAction()); for (int i = 0; i < numberOfThreads; i++) { new Thread(new Task(barrier)).start(); } } } class Task implements Runnable { private final CyclicBarrier barrier; Task(CyclicBarrier barrier) { this.barrier = barrier; } @Override public void run() { try { System.out.println(Thread.currentThread().getName() + " is waiting at the barrier."); barrier.await(); System.out.println(Thread.currentThread().getName() + " has passed the barrier."); } catch (InterruptedException | BrokenBarrierException e) { e.printStackTrace(); } } } class BarrierAction implements Runnable { @Override public void run() { System.out.println("Barrier Action executed. All threads are released."); } }
当您运行上述代码时,您将观察到以下序列:
这是一个示例输出:
Thread-0 is waiting at the barrier. Thread-1 is waiting at the barrier. Thread-2 is waiting at the barrier. Barrier Action executed. All threads are released. Thread-0 has passed the barrier. Thread-1 has passed the barrier. Thread-2 has passed the barrier.
CyclicBarrier 是 Java 中协调多线程的宝贵工具。它允许线程相互等待,并且可以跨多个周期重用,这使其成为许多同步场景的理想选择。无论您是批量处理数据还是实现并行算法,了解如何有效使用CyclicBarrier都将增强您的多线程编程技能。
如果您对在项目中使用 CyclicBarrier 有任何疑问或需要进一步说明,请随时在下面发表评论!
阅读更多帖子:什么是 CyclicBarrier?关键事实和示例解释
以上是什么是循环势垒?关键事实和示例解释的详细内容。更多信息请关注PHP中文网其他相关文章!