1

単純に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)
}

そして、もう一方のスレッドは、フェーザーを次のフェーズに進めるだけです。これは理想的ではないため、ポインタをいただければ幸いです。

4

2 に答える 2