CyclicBarrierの使い方は何ですか?
サイクリックバリアは、一連のスレッドがお互いを待ち合わせ、すべてのスレッドがあるバリア状態に到達するまで同時に実行することを可能にする同期補助クラスです。サイクリックバリアは、複数のスレッドでデータを計算し、最終的に計算結果を統合するシナリオで使用することができます。
CyclicBarrierは、指定した初期値を持つカウンターとして理解できます。各スレッドはバリアに到達すると、await()メソッドを呼び出して自身をカウントし、カウンターの値が1つ減少します。すべてのスレッドがバリアに到達するまで、カウンターの値が0になると、すべてのスレッドが同時に解放され、バリアがリセットされ、再利用できるようになります。
CyclicBarrier の主なメソッドには、次のものがあります:
- 全てのスレッドがバリアに到達するまで、バリアで待機します。各スレッドがこのメソッドを呼び出すと、カウンターが1つ減少し、カウンターが0になるとすべてのスレッドが同時に解放されます。
- 指定されたタイムアウト時間内に待機し、指定された時間を超過してもまだスレッドがバリアに到達していない場合は、TimeoutException例外がスローされます。
CyclicBarrierの使用手順は次のとおりです:
- CyclicBarrier インスタンスを作成し、初期値とバリアに到達した際に実行されるアクションを指定します。
- 各スレッドで、await()メソッドを呼び出して他のスレッドがバリアに到達するのを待ちます。
- 全てのスレッドがバリアに到達した後、指定されたアクションを実行します。
- CyclicBarrierを再利用するには、新しいインスタンスを作成することで実現できます。