java多线程中何时重置CyclicBarrier
我正在阅读下面链接中的java多线程中何时重置CyclicBarrier,java,multithreading,concurrency,java.util.concurrent,cyclicbarrier,Java,Multithreading,Concurrency,Java.util.concurrent,Cyclicbarrier,我正在阅读下面链接中的CyclicBarrier 在示例1,CyclicRaceDemo.javamain方法中,在不调用reset方法的情况下重用CyclicBarrier 我运行了这个示例,效果很好。所以,我想知道reset方法有什么用。什么时候叫?或者我们需要调用它吗?ACyclicBarrier是循环的,因为它可以在不重置的情况下重复使用。从 允许一组线程全部等待的同步辅助工具 彼此到达一个共同的障碍点。骑自行车的人很有用 在涉及固定大小线程组的程序中,必须 偶尔互相等待。这种势垒被称
CyclicBarrier
在示例1,CyclicRaceDemo.java
main方法中,在不调用reset方法的情况下重用CyclicBarrier
我运行了这个示例,效果很好。所以,我想知道
reset
方法有什么用。什么时候叫?或者我们需要调用它吗?ACyclicBarrier
是循环的,因为它可以在不重置的情况下重复使用。从
允许一组线程全部等待的同步辅助工具
彼此到达一个共同的障碍点。骑自行车的人很有用
在涉及固定大小线程组的程序中,必须
偶尔互相等待。这种势垒被称为循环势垒,因为
释放等待的线程后,可以重新使用它
因此,在正常使用中,一旦收集了所有的线程并且屏障被打破,它就会自动重置,并且可以再次使用
从
将屏障重置为其初始状态。如果任何一方目前
在栅栏前等待,他们会带着
BrokenBarrierException
。请注意,在发生破损后会重置
由于其他原因,执行起来可能比较复杂;线程需要
以其他方式重新同步,然后选择一种方式执行重置。
更可取的做法是为后续工作创建一个新的屏障
使用
因此,reset
会导致任何当前正在等待的线程抛出BrokenBarrierException
并立即唤醒<代码>重置在您想要“打破”屏障时使用
还要注意警告——一旦线程被强制唤醒,就很难再次同步它们
TL;DR:在正常情况下,您不需要使用
reset()
。您所说的棘手的是什么意思?这是来自javadoc的同一个词,我不懂。这是否意味着当屏障在处理破损时(由reset()
引起),很难重新同步屏障,然后一些其他线程来请求…屏障?链接帖子现在不可用。