CyclicBarrierを要約

A CyclicBarrierをはじめ
1:CyclicBarrierを(再使用可能なバリア/フェンス)たCountDownLatch(カウントダウンロックアウト)に類似して、イベントが発生するまでスレッドのセットを遮断しました。
2:主な違いは、ロックアウトして、すべてのスレッドが継続するために、同時にバリア位置に到着しなければならないことです。
3:他のスレッドのバリアを待っている間に、イベント待ちを遮断します。
4:CyclicBarrierを繰り返しバリア場所で一緒にスレッドの特定の数を作ることができます。スレッドは、バリア位置()メソッドを待つ呼ぶ達したときに、すべてのスレッドがバリア位置に到達するまで、このメソッドはブロックされます。すべてのスレッドがバリアの位置に到達した場合には、障壁は、すべてのスレッドがリリースされます。この時間を開き、障壁は、次の使用のためにリセットされます。
5:CyclicBarrierを、すべてのスレッドが共通のバリアポイントに到達するまで互いのスレッドのセットを待機可能にする同期化支援です。
6:時々お互いを待つ必要がスレッドの固定数のプログラムがあり、この場合には、使用CyclicBarrierを便利。
7:すべてのスレッドで互いにリリース後、この障壁は再使用することができるので、障壁は、ループで修飾されている理由。

2:CyclicBarrierをアプリケーションシナリオ
CyclicBarrierを複数のスレッドをグループ化するための計算に使用されます。
たとえば、大規模なタスク、多くの場合、すべてのサブタスクが主なタスクを実行するための実行時間を完了したときにのみ、この時間はあなたがCyclicBarrierをを選択することができ、実行するサブタスクを多く割り当てる必要があります。

3:共通APIメソッド:

1:CyclicBarrierを(当事者)メソッドは
コンストラクタを待機中のスレッドの数のそれぞれを初期化します。

2:CyclicBarrierを(当事者、RunnableをbarrierAction ) メソッドは、
スレッドの数、および各スレッドコンストラクタバリア待ち時間を初期化します。
バリア実行中のスレッドのタイミング:CyclicBarrierをバリアする前に開いて、待機中のスレッドの数の後に=関係者。
例えば、パケットの計算に、各スレッドは、計算の一部を担当して、スレッドの終了後の最終計算は、スレッドがバリア集計計算を引き渡さ。

3:getParties()メソッドは、
スレッドの数オープンCyclicBarrierを障壁を得ました。

4:getNumberWaiting()メソッド
スレッドの数を得るためには、CyclicBarrierを上に待機しています。

5:のawait()メソッドは
次のいずれかの状況が発生するまで、CyclicBarrierをを待ってブロックしました。
CyclicBarrierをで待機しているスレッドの数は、当事者に達し、リリースされたすべてのスレッドは、引き続き。
現在のスレッドは引き続き、InterruptedExceptionある例外と停止待機を投げ、中断されました。
他の待機中のスレッドが中断され、現在のスレッドBrokenBarrierExceptionがスロー、ストップ待ち、継続されます。
他のスレッドを待ってタイムアウト、現在のスレッドBrokenBarrierExceptionがスローされ、ストップ待ち、続けています。
他のスレッドがCyclicBarrier.reset()メソッド、BrokenBarrierExceptionがスローされ、現在のスレッド、および停止待機を呼び出し、続けています。
スレッドの呼び出しは(待つ)、彼はフェンスに達していると述べました。
BrokenBarrierException)の損傷があり得るので、スレッドの一方が(待つ、フェンスが破棄された表し中断またはタイムアウトされます。

6:のawait(タイムアウト、TimeUnitで)方法は、
次のいずれかの状況が発生するまで、CyclicBarrierをオン時間限られたブロック待っていました。
CyclicBarrierをで待機しているスレッドの数は、当事者に達し、リリースされたすべてのスレッドは、引き続き。
現在のスレッドは引き続き、InterruptedExceptionある例外と停止待機を投げ、中断されました。
現在のスレッドが例外がTimeoutExceptionをスロー、ストップ待って、タイムアウトを待つために、続けています。
他の待機中のスレッドが中断され、現在のスレッドBrokenBarrierExceptionがスロー、ストップ待ち、継続されます。
他のスレッドを待ってタイムアウト、現在のスレッドBrokenBarrierExceptionがスローされ、ストップ待ち、続けています。
他のスレッドが継続し、CyclicBarrier.reset()メソッド、BrokenBarrierExceptionがスローされ、現在のスレッド、および停止待機を呼び出します

7:isBroken()メソッド
破壊破壊されるフラグの値を取得するために、次のような状況では、この値。
CyclicBarrierを初期化は、= falseの壊れた場合、バリアが破損していない表します。
あなたがスレッドを待っている場合は、中断された壊れ= trueで、それは破損して障壁を表しています。
スレッドがタイムアウトを待っている場合は、壊れた=真、それは損傷を受けた障壁を表しています。
スレッドがある場合CyclicBarrier.reset()メソッドを呼び出し、壊れ= falseが、障壁バック損傷していない状態を表しています。

8:reset() 方法
使 CyclicBarrier 回归初始状态,它做了两件事。
如果有正在等待的线程,则会抛出 BrokenBarrierException 异常,且这些线程停止等待,继续执行。
将是否破损标志位 broken 置为 false。

 

おすすめ

転載: www.cnblogs.com/jelly12345/p/12111094.html