Java の並行性: カウントダウン ラッチと循環バリアの比較 質問する

Java の並行性: カウントダウン ラッチと循環バリアの比較 質問する

私は読んでいたjava.util.concurrent API、そして、

  • CountDownLatch: 1 つ以上のスレッドが、他のスレッドで実行されている一連の操作が完了するまで待機できるようにする同期補助機能。
  • CyclicBarrier: 一連のスレッドが共通のバリア ポイントに到達するまで相互に待機できるようにする同期補助機能。

私にとってはどちらも同じように思えますが、もっと多くのことがあると確信しています。

たとえば、 ではCoundownLatch, the countdown value could not be reset, that can happen in the case of CyclicBarrier

これら 2 つには他に何か違いがありますか?カウントダウンの値をリセットしたい場所は
どこですか?use cases

ベストアンサー1

もう一つの違いがあります。

を使用する場合CyclicBarrier、バリアをトリガーする待機スレッドの数を指定することが前提となります。 5 を指定した場合、 を呼び出すには少なくとも 5 つのスレッドが必要ですawait()

を使用する場合、すべての待機スレッドが解放される のCountDownLatch呼び出し回数を指定します。つまり、 は1 つのスレッドのみで使用できます。countDown()CountDownLatch

「なぜそんなことをするのですか?」とあなたは言うかもしれません。コールバックを実行する、他の誰かがコーディングした謎の API を使用していると想像してください。特定のコールバックが何回か呼び出されるまで、スレッドの 1 つを待機させたいとします。コールバックがどのスレッドで呼び出されるかはわかりません。この場合、 はCountDownLatch完璧ですが、 を使ってこれを実装する方法が思いつきませんCyclicBarrier(実際には思いつきますが、タイムアウトが発生します... いやです!)。

それをCountDownLatchリセットできればいいのに!

おすすめ記事