gpt4 book ai didi

java - CyclicBarrier 是否会为最后一次等待重置自身?

转载 作者:行者123 更新时间:2023-11-29 06:52:38 26 4
gpt4 key购买 nike

我正在寻找 CyclicBarrier我写了这个演示。

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import static java.util.concurrent.ThreadLocalRandom.current;
public class CyclicBarrierDemo {
public static void main(final String[] args) {
final int threads = 100;
final CyclicBarrier barrier
= new CyclicBarrier(threads, () -> System.out.println("tripped"));
final int rounds = 5;
for (int i = 0; i < threads; i++) {
new Thread(() -> {
for (int j = 0; j < rounds; j++) {
try {
Thread.sleep(current().nextLong(1000L));
barrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace(System.err);
return;
}
}
}).start();
}
}
}

程序打印出五个 tripped 并退出,如我所料

tripped
tripped
tripped
tripped
tripped

我的问题是 CyclicBarrier 实例在最后一个 await() 到达时自行重置?这样输出是预期的吗?我找不到任何词来形容它。

最佳答案

My question is that the CyclicBarrier instance reset itself when the last await() arrived?

是的。从某种意义上说,该实例可以在应用程序无需执行任何操作的情况下被重用。

So that the output is expected?

I couldn't find any words for that.

Javadoc说:“屏障被称为循环屏障,因为它可以在等待线程被释放后重新使用。”

此外,javadoc 中显示的示例只有在实例自行重置时才能按照描述的方式工作。请注意,没有对 reset() 的显式调用。 (此外,根据方法的 javadoc,如果您想重用屏障,则不清楚显式调用 reset() 是否有用......。)

关于java - CyclicBarrier 是否会为最后一次等待重置自身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42525669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com