我在以下链接中阅读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()
。