【发布时间】:2018-01-17 21:47:27
【问题描述】:
我知道我可以直接使用CountDownLatch,但是,作为练习并更好地理解Phaser,我想使用它而不是COuntDownLatch。
因此,我将创建 N 个等待者,以及一个需要翻转闩锁的线程。所有等待者,如果在翻转之前到达,都会阻塞,但是在锁存器倒计时之后,所有后续的await() 都会立即返回。
与Phaser 我不知道如何实现这一点...屏障很容易,因为我们有 N + 1 个线程,每个线程都到达并等待。然而,为了确保没有线程会在第一阶段之后等待,不知何故让我望而却步。
我能想出的唯一方法,不是很好,如下:
Phaser p = new Phaser(1);
int phase = p.getPhase();
....
// thread that awaits()
new Thread(new Runnable() {
....
p.awaitAdvance(phase)
}
而另一个线程只是将移相器推进到下一个阶段。这并不理想,因此任何指针都将不胜感激。
【问题讨论】:
标签: java multithreading concurrency java.util.concurrent phaser