我正在阅读CyclicBarrier
以下链接
http://java-latte.blogspot.in/2013/10/cyclicbarrier-in-java-concurrency.html。
在示例 1 中,CyclicRaceDemo.java
main 方法中,CyclicBarrier 被重用,无需调用reset方法。
我运行了这个例子,它运行良好。所以,我想知道reset
方法的用途是什么。什么时候应该调用它?还是我们需要调用它?
我正在阅读CyclicBarrier
以下链接
http://java-latte.blogspot.in/2013/10/cyclicbarrier-in-java-concurrency.html。
在示例 1 中,CyclicRaceDemo.java
main 方法中,CyclicBarrier 被重用,无需调用reset方法。
我运行了这个例子,它运行良好。所以,我想知道reset
方法的用途是什么。什么时候应该调用它?还是我们需要调用它?
ACyclicBarrier
是循环的,因为它可以在不重置的情况下重复使用。来自Javadoc
一种同步辅助工具,它允许一组线程相互等待以达到共同的障碍点。CyclicBarriers 在涉及固定大小的线程组的程序中很有用,这些线程组必须偶尔相互等待。屏障被称为循环的,因为它可以在等待线程被释放后重新使用。
所以在正常使用中,一旦所有线程都被收集起来,屏障被打破,它就会自行重置,可以再次使用。
将屏障重置为其初始状态。如果任何一方目前在屏障处等待,他们将返回一个
BrokenBarrierException
. 请注意,由于其他原因发生破损后的重置可能会很复杂;线程需要以其他方式重新同步,并选择一个执行重置。相反,最好为后续使用创建一个新的屏障。
因此reset
导致任何当前等待的线程抛出 aBrokenBarrierException
并立即唤醒。reset
当你想“打破”障碍时使用。
还要注意警告 - 一旦线程被强制唤醒,再次同步它们是很棘手的。
TL;DRreset()
:在正常情况下,您永远不需要使用。