2012-04-25 12 views
0

CyclicBarrierとCountDownLatchの違いは何ですか?私はthnik両方が同じように見えるので、微妙な違いがあります。CyclicBarrierとCountDownLatch?

私が間違っているかどうか教えてください。同じことを説明してください。

+0

[Java並行性:Countdownラッチ対循環バリア]の複製可能性(http://stackoverflow.com/questions/4168772/java-concurrency-countdown-latch-vs-cyclic-barrier) – Simon

答えて

1

CountDownLatchは、ワンタイム同期に使用されます。 CountDownLatchを使用している間、どんなスレッドでも何度でもcountDown()を呼び出すことができます。 await()を呼び出したスレッドは、他のブロックされていないスレッドによるcountDown()の呼び出しのためカウントがゼロになるまでブロックされます。 javadoc for CountDownLatch状態:

現在のカウントがゼロによる に待機中のすべてのスレッド が解放された後にカウントダウン()メソッドの呼び出しと直ちに待つリターン の任意の後続の呼び出しに到達するまで、方法はブロックお待ちしております。 ...

別の典型的な使用量は その部分と カウントダウンラッチを実行するRunnableを有する各部分について説明し、N個の部分に問題を分割し、エグゼキュータにすべてのランナブルをキューイングすることであろう。 すべてのサブパーツが完成すると、コーディネートスレッドは を待つことができます。 (スレッドが繰り返しCyclicBarrierをを使用する代わりに、 この方法をカウントダウンしなければならない場合。)

対照的に、環状バリアは複数同期化]ポイントのために使用され、例えばスレッドのセットがループ/段階的な計算を実行していて、次の反復/段階を開始する前に同期する必要がある場合。 javadoc for CyclicBarrierあたりのとおり: 待機中のスレッドが解放された後、それを再使用することができるため

障壁は、環状と呼ばれています。

CountDownLatchとは異なり、await()の各呼び出しはいくつかの段階に属し、その段階に属するすべての関係者がawait()を呼び出すまでスレッドをブロックする可能性があります。 CyclicBarrierでサポートされている明示的なcountDown()操作はありません。

関連する問題