単純にCountDownLatch直接使用できることは理解していますが、演習として理解を深めるためPhaserに、 の代わりに使用したいと思いますCOuntDownLatch。
したがって、N 個の awaiter と、ラッチを反転する必要がある 1 つのスレッドを作成します。すべての待機者は、フリップの前に到着するとブロックされますが、ラッチがカウントダウンされた後は、後続のすべてのawait()リターンが即座に返されます。
Phaserこれを達成する方法がわかりません... バリアは簡単です。N + 1 個のスレッドがあり、それぞれが到着して待機しているためです。ただし、最初のフェーズの後に待機するスレッドがないことを確認するには、どういうわけか私を避けます。
私が思いついた唯一の方法は、次のとおりです。
Phaser p = new Phaser(1);
int phase = p.getPhase();
....
// thread that awaits()
new Thread(new Runnable() {
....
p.awaitAdvance(phase)
}
そして、もう一方のスレッドは、フェーザーを次のフェーズに進めるだけです。これは理想的ではないため、ポインタをいただければ幸いです。