Language

CountDownLatch クラス

定義

1 つ以上のスレッドが、他のスレッドで実行されている一連の操作が完了するまで待機できるようにする同期支援。

[Android.Runtime.Register("java/util/concurrent/CountDownLatch", DoNotGenerateAcw=true)]
public class CountDownLatch : Java.Lang.Object
[<Android.Runtime.Register("java/util/concurrent/CountDownLatch", DoNotGenerateAcw=true)>]
type CountDownLatch = class
    inherit Object
継承
CountDownLatch
属性

注釈

1 つ以上のスレッドが、他のスレッドで実行されている一連の操作が完了するまで待機できるようにする同期支援。

CountDownLatchは、特定の <em>count</em> で初期化されます。 #await await メソッドは、#countDown メソッドの呼び出しにより現在のカウントが 0 に達するまでブロックされ、その後、待機しているすべてのスレッドが解放され、後続の呼び出し#await awaitすぐに戻ります。 これは一発の現象です。カウントをリセットすることはできません。 カウントをリセットするバージョンが必要な場合は、 CyclicBarrierの使用を検討してください。

CountDownLatchは汎用性の高い同期ツールであり、さまざまな目的で使用できます。 カウント 1 で初期化された CountDownLatch は、単純なオン/オフ ラッチまたはゲートとして機能します。 #await await 呼び出すすべてのスレッドは、 #countDownを呼び出すスレッドによって開かれるまでゲートで待機します。 CountDownLatchem<N>/em< に初期化された>を使用すると<em>N</em>スレッドが何らかのアクションを完了するか、何らかのアクションが N 回完了するまで 1 つのスレッドを待機させることができます。

CountDownLatchの便利なプロパティは、countDown呼び出すスレッドがカウントが 0 に達するまで待機する必要がないという点です。これにより、すべてのスレッドが#await awaitを超えてすべてのスレッドが通過するのを防ぐことができます。

<b>サンプル使用法:</b> ワーカー スレッドのグループが 2 つのカウントダウン ラッチを使用するクラスのペアを次に示します。 <ul><li>最初は、ドライバーが続行する準備ができるまでワーカーが進まない開始シグナルです。 <li>2 つ目は、ドライバーがすべてのワーカーが完了するまで待機できるようにする完了シグナルです。 </ul>

{@code
            class Driver { // ...
              void main() throws InterruptedException {
                CountDownLatch startSignal = new CountDownLatch(1);
                CountDownLatch doneSignal = new CountDownLatch(N);

                for (int i = 0; i < N; ++i) // create and start threads
                  new Thread(new Worker(startSignal, doneSignal)).start();

                doSomethingElse();            // don't let run yet
                startSignal.countDown();      // let all threads proceed
                doSomethingElse();
                doneSignal.await();           // wait for all to finish
              }
            }

            class Worker implements Runnable {
              private final CountDownLatch startSignal;
              private final CountDownLatch doneSignal;
              Worker(CountDownLatch startSignal, CountDownLatch doneSignal) {
                this.startSignal = startSignal;
                this.doneSignal = doneSignal;
              }
              public void run() {
                try {
                  startSignal.await();
                  doWork();
                  doneSignal.countDown();
                } catch (InterruptedException ex) {} // return;
              }

              void doWork() { ... }
            }}

もう 1 つの一般的な使用方法は、問題を N 個の部分に分割し、その部分を実行してラッチでカウントダウンする Runnable で各部分を記述し、すべての実行可能ファイルを Executor にキューに入れる方法です。 すべてのサブ部分が完了すると、調整スレッドは await を通過できるようになります。 (この方法でスレッドを繰り返しカウントダウンする必要がある場合は、代わりに CyclicBarrierを使用します)。

{@code
            class Driver2 { // ...
              void main() throws InterruptedException {
                CountDownLatch doneSignal = new CountDownLatch(N);
                Executor e = ...;

                for (int i = 0; i < N; ++i) // create and start threads
                  e.execute(new WorkerRunnable(doneSignal, i));

                doneSignal.await();           // wait for all to finish
              }
            }

            class WorkerRunnable implements Runnable {
              private final CountDownLatch doneSignal;
              private final int i;
              WorkerRunnable(CountDownLatch doneSignal, int i) {
                this.doneSignal = doneSignal;
                this.i = i;
              }
              public void run() {
                doWork();
                doneSignal.countDown();
              }

              void doWork() { ... }
            }}

メモリ整合性の影響: カウントが 0 になるまで、別のスレッドの対応するcountDown()から正常に戻った後に、<>i<happen-before>/iawait() アクションを呼び出す前のスレッド内のアクション。

1\.5 で追加されました。

Javaドキュメント。

このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。

コンストラクター

名前 説明
CountDownLatch(Int32)

指定した数で初期化された CountDownLatch を構築します。

CountDownLatch(IntPtr, JniHandleOwnership)

JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。

プロパティ

名前 説明
Class

この Objectのランタイム クラスを返します。

(継承元 Object)
Count

現在のカウントを返します。

Handle

基になる Android インスタンスへのハンドル。

(継承元 Object)
JniIdentityHashCode

相互運用ランタイムによってこのJava ピアに割り当てられた ID ハッシュ コードを取得します。

(継承元 Object)
JniManagedPeerState

1 つ以上のスレッドが、他のスレッドで実行されている一連の操作が完了するまで待機できるようにする同期支援。

(継承元 JavaObject)
JniPeerMembers

1 つ以上のスレッドが、他のスレッドで実行されている一連の操作が完了するまで待機できるようにする同期支援。

PeerReference

このJava ピアの JNI オブジェクト参照を取得します。

(継承元 Object)
ThresholdClass

この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

ThresholdType

この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

メソッド

名前 説明
Await()

スレッドが Thread#interrupt interrupted でない限り、ラッチが 0 にカウントダウンされるまで、現在のスレッドを待機させます。

Await(Int64, TimeUnit)

スレッドが Thread#interrupt 割り込み中であるか、指定された待機時間が経過しない限り、ラッチが 0 にカウントダウンされるまで、現在のスレッドを待機させます。

AwaitAsync()

ラッチ数が 0 に達するまで非同期的に待機します。

AwaitAsync(Int64, TimeUnit)

ラッチ数が 0 に達するか、指定された待機時間が経過するまで非同期的に待機します。

Clone()

このオブジェクトのコピーを作成して返します。

(継承元 Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

1 つ以上のスレッドが、他のスレッドで実行されている一連の操作が完了するまで待機できるようにする同期支援。

(継承元 JavaObject)
CountDown()

ラッチの数を減らし、カウントが 0 に達した場合に待機しているすべてのスレッドを解放します。

Dispose()

このJava ピアによって保持されているリソースを解放します。

(継承元 Object)
Dispose(Boolean)

このJava ピアによって保持されているリソースを解放します。

(継承元 Object)
DisposeUnlessReferenced()

1 つ以上のスレッドが、他のスレッドで実行されている一連の操作が完了するまで待機できるようにする同期支援。

(継承元 JavaObject)
Equals(Object)

1 つ以上のスレッドが、他のスレッドで実行されている一連の操作が完了するまで待機できるようにする同期支援。

(継承元 JavaObject)
Equals(Object)

他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。

(継承元 Object)
GetHashCode()

オブジェクトのハッシュ コード値を返します。

(継承元 Object)
JavaFinalize()
古い.

オブジェクトへの参照がなくなったとガベージ コレクションによって判断されたときに、オブジェクトのガベージ コレクターによって呼び出されます。

(継承元 Object)
Notify()

このオブジェクトのモニターで待機している 1 つのスレッドを起動します。

(継承元 Object)
NotifyAll()

このオブジェクトのモニターで待機しているすべてのスレッドを起動します。

(継承元 Object)
SetHandle(IntPtr, JniHandleOwnership)

Handle プロパティを設定します。

(継承元 Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

1 つ以上のスレッドが、他のスレッドで実行されている一連の操作が完了するまで待機できるようにする同期支援。

(継承元 JavaObject)
ToArray<T>()

このJava配列ラッパーからマネージド配列を作成します。

(継承元 Object)
ToString()

オブジェクトの文字列表現を返します。

(継承元 Object)
UnregisterFromRuntime()

相互運用ランタイムからこのJava ピアの登録を解除します。

(継承元 Object)
Wait()

現在のスレッドが起動するまで待機します。通常は、 <em>notified</em> または <em>interrupted</em>。

(継承元 Object)
Wait(Int64, Int32)

現在のスレッドは、通常、 <em>notified</em> または <em>interrupted</em>、または一定のリアルタイムが経過するまで、起動されるまで待機します。

(継承元 Object)
Wait(Int64)

現在のスレッドは、通常、 <em>notified</em> または <em>interrupted</em>、または一定のリアルタイムが経過するまで、起動されるまで待機します。

(継承元 Object)

明示的なインターフェイスの実装

名前 説明
IJavaPeerable.Disposed()

1 つ以上のスレッドが、他のスレッドで実行されている一連の操作が完了するまで待機できるようにする同期支援。

(継承元 JavaObject)
IJavaPeerable.Finalized()

1 つ以上のスレッドが、他のスレッドで実行されている一連の操作が完了するまで待機できるようにする同期支援。

(継承元 JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

1 つ以上のスレッドが、他のスレッドで実行されている一連の操作が完了するまで待機できるようにする同期支援。

(継承元 JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

1 つ以上のスレッドが、他のスレッドで実行されている一連の操作が完了するまで待機できるようにする同期支援。

(継承元 JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

1 つ以上のスレッドが、他のスレッドで実行されている一連の操作が完了するまで待機できるようにする同期支援。

(継承元 JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

1 つ以上のスレッドが、他のスレッドで実行されている一連の操作が完了するまで待機できるようにする同期支援。

(継承元 JavaObject)

拡張メソッド

名前 説明
GetJniTypeName(IJavaPeerable)

インスタンス selfの型の JNI 名を取得します。

JavaAs<TResult>(IJavaPeerable)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

JavaCast<TResult>(IJavaObject)

Android ランタイムチェック型変換を実行します。

JavaCast<TResult>(IJavaObject)

1 つ以上のスレッドが、他のスレッドで実行されている一連の操作が完了するまで待機できるようにする同期支援。

TryJavaCast<TResult>(IJavaPeerable, TResult)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

適用対象