Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java多线程中何时重置CyclicBarrier_Java_Multithreading_Concurrency_Java.util.concurrent_Cyclicbarrier - Fatal编程技术网

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
方法有什么用。什么时候叫?或者我们需要调用它吗?

A
CyclicBarrier
是循环的,因为它可以在不重置的情况下重复使用。从

允许一组线程全部等待的同步辅助工具 彼此到达一个共同的障碍点。骑自行车的人很有用 在涉及固定大小线程组的程序中,必须 偶尔互相等待。这种势垒被称为循环势垒,因为 释放等待的线程后,可以重新使用它

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

将屏障重置为其初始状态。如果任何一方目前 在栅栏前等待,他们会带着
BrokenBarrierException
。请注意,在发生破损后会重置 由于其他原因,执行起来可能比较复杂;线程需要 以其他方式重新同步,然后选择一种方式执行重置。 更可取的做法是为后续工作创建一个新的屏障 使用

因此,
reset
会导致任何当前正在等待的线程抛出
BrokenBarrierException
并立即唤醒<代码>重置在您想要“打破”屏障时使用

还要注意警告——一旦线程被强制唤醒,就很难再次同步它们


TL;DR:在正常情况下,您不需要使用
reset()

您所说的
棘手的
是什么意思?这是来自javadoc的同一个词,我不懂。这是否意味着当屏障在处理破损时(由
reset()
引起),很难重新同步屏障,然后一些其他线程来请求…屏障?链接帖子现在不可用。