11

我正在阅读CyclicBarrier以下链接 http://java-latte.blogspot.in/2013/10/cyclicbarrier-in-java-concurrency.html

在示例 1 中,CyclicRaceDemo.javamain 方法中,CyclicBarrier 被重用,无需调用reset方法。

我运行了这个例子,它运行良好。所以,我想知道reset方法的用途是什么。什么时候应该调用它?还是我们需要调用它?

4

1 回答 1

19

ACyclicBarrier是循环的,因为它可以在不重置的情况下重复使用。来自Javadoc

一种同步辅助工具,它允许一组线程相互等待以达到共同的障碍点。CyclicBarriers 在涉及固定大小的线程组的程序中很有用,这些线程组必须偶尔相互等待。屏障被称为循环的,因为它可以在等待线程被释放后重新使用。

所以在正常使用中,一旦所有线程都被收集起来,屏障被打破,它就会自行重置,可以再次使用。

来自Javadocreset()

将屏障重置为其初始状态。如果任何一方目前在屏障处等待,他们将返回一个 BrokenBarrierException. 请注意,由于其他原因发生破损后的重置可能会很复杂;线程需要以其他方式重新同步,并选择一个执行重置。相反,最好为后续使用创建一个新的屏障。

因此reset导致任何当前等待的线程抛出 aBrokenBarrierException并立即唤醒。reset当你想“打破”障碍时使用。

还要注意警告 - 一旦线程被强制唤醒,再次同步它们是很棘手的。

TL;DRreset() :在正常情况下,您永远不需要使用。

于 2014-06-08T09:24:05.627 回答