1. ホーム
  2. java

[解決済み] Java の並行処理。カウントダウンラッチ vs サイクリックバリア

2022-04-22 10:41:29

質問

を読んでいたのですが java.util.concurrent API を発見しました。

  • CountDownLatch : 他のスレッドで実行されている一連の処理が完了するまで、1つまたは複数のスレッドが待機できるようにする同期補助機能。
  • CyclicBarrier : スレッドのセットが共通のバリアポイントに到達するのを互いに待つことを可能にする同期化補助機能。

私にはどちらも同じに見えますが、きっともっと多くのことがあるのでしょう。

例えば CoundownLatch, the countdown value could not be reset, that can happen in the case of CyclicBarrier .

他に何か違いはあるのでしょうか?

はどのようなものですか? use cases カウントダウンの値をリセットしたい場合は?

解決方法は?

大きな違いとして サイクリックバリア は、共通のバリア条件が満たされたときに実行される(オプションの)Runnable タスクを取ります。

また、バリアで待機しているクライアントの数と、バリアのトリガーに必要な数を取得することができます。 一度トリガーされると、バリアはリセットされ、再び使用できるようになります。

単純なユースケース(サービスの開始など)には、カウントダウンラッチで十分である。 CyclicBarrierは、より複雑な調整タスクに有効です。 例えば、複数のサブタスクが計算に関与するような、並列計算のようなものです。 マップレデュース .