Jin*_*won 2 java cyclicbarrier
我正在研究 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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如我所料,程序打印出 5tripped并退出。
tripped
tripped
tripped
tripped
tripped
Run Code Online (Sandbox Code Playgroud)
我的问题是CyclicBarrier实例在最后一个await()到达时会自行重置吗?那么输出是预期的吗?我找不到任何形容词。
将 CyclicBarrier 视为门,将线程视为汽车。
直到看到 100 辆车在门前等候时,门(栏杆)才会打开。开通时只允许那批100辆车通过,然后再关闭。同样的事情会再次发生(循环)。
| 归档时间: |
|
| 查看次数: |
809 次 |
| 最近记录: |