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

在示例1,CyclicRaceDemo.java主方法中,无需调用reset方法即可重用CyclicBarrier。

我运行了示例,它运行良好。因此,我想知道reset方法的用途是什么。什么时候应该叫它?还是我们完全需要调用它?

最佳答案

CyclicBarrier是循环的,因为它可以重用而无需复位。从Javadoc


同步帮助,允许一组线程全部等待
彼此达到共同的障碍点。 CyclicBarriers是有用的
在涉及固定大小线程的程序中,
偶尔互相等待。屏障被称为循环的,因为
释放等待线程后,可以重新使用它。


因此,在正常使用中,一旦收集了所有线程并且打破了障碍,它就会重置并可以再次使用。

Javadoc for reset()


将屏障重置为其初始状态。如果当前有任何参与者
在障碍处等待,他们将带着
BrokenBarrierException。请注意,发生破损后会重置
由于其他原因,执行起来可能很复杂;线程需要
以其他方式重新同步,然后选择一个以执行重置。
相反,最好为以后的操作创建新的障碍。
用。


因此,reset导致任何当前正在等待的线程抛出BrokenBarrierException并立即唤醒。当您想“突破”障碍时使用reset

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

TL; DR:通常情况下,您永远不需要使用reset()

10-04 13:05