Language

CyclicBarrier クラス

定義

一連のスレッドが互いに共通のバリア ポイントに到達するまで待機できるようにする同期支援。

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

注釈

一連のスレッドが互いに共通のバリア ポイントに到達するまで待機できるようにする同期支援。 CyclicBarriers は、スレッドの固定サイズのパーティを含むプログラムで役立ちます。これは、お互いを待つ必要がある場合があります。 バリアは、待機中のスレッドが解放された後に再利用できるため、 <em>cyclic</em> と呼ばれます。

CyclicBarrierでは、パーティの最後のスレッドが到着した後、スレッドが解放される前に、バリア ポイントごとに 1 回実行されるオプションの Runnable コマンドがサポートされます。 この <em>barrier アクション</em> は、いずれかの当事者が続行する前に共有状態を更新する場合に便利です。

<b>サンプル使用法:</b> 並列分解設計でバリアを使用する例を次に示します。

{@code
            class Solver {
              final int N;
              final float[][] data;
              final CyclicBarrier barrier;

              class Worker implements Runnable {
                int myRow;
                Worker(int row) { myRow = row; }
                public void run() {
                  while (!done()) {
                    processRow(myRow);

                    try {
                      barrier.await();
                    } catch (InterruptedException ex) {
                      return;
                    } catch (BrokenBarrierException ex) {
                      return;
                    }
                  }
                }
              }

              public Solver(float[][] matrix) {
                data = matrix;
                N = matrix.length;
                Runnable barrierAction = () -> mergeRows(...);
                barrier = new CyclicBarrier(N, barrierAction);

                List<Thread> threads = new ArrayList<>(N);
                for (int i = 0; i < N; i++) {
                  Thread thread = new Thread(new Worker(i));
                  threads.add(thread);
                  thread.start();
                }

                // wait until done
                for (Thread thread : threads)
                  try {
                    thread.join();
                  } catch (InterruptedException ex) { }
              }
            }}

ここでは、各ワーカー スレッドがマトリックスの行を処理し、すべての行が処理されるまでバリアで待機します。 すべての行が処理されると、指定された Runnable バリア アクションが実行され、行がマージされます。 合併によってソリューションが見つかったと判断された場合、 done() は true を返し、各ワーカーは終了します。

バリア アクションが実行時に中断されているパーティに依存しない場合、パーティ内のスレッドは、解放されたときにそのアクションを実行できます。 これを容易にするために、 #await を呼び出すたびに、バリアにあるそのスレッドの到着インデックスが返されます。 その後、バリア アクションを実行するスレッドを選択できます。次に例を示します。

{@code
            if (barrier.await() == 0) {
              // log the completion of this iteration
            }}

CyclicBarrierでは、同期試行の失敗に対してすべてまたはなし破損モデルが使用されます。中断、障害、タイムアウトのためにスレッドが途中でバリア ポイントを離れると、そのバリア ポイントで待機している他のすべてのスレッドも、BrokenBarrierException経由で異常に残ります (または、ほぼ同時に中断された場合はInterruptedException)。

メモリ整合性の効果: バリア アクションの一部である await()<i>happen-before</i> アクションを呼び出す前のスレッド内のアクション。その後、他のスレッドの対応するから正常に戻った後にawait()アクション。

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

Javaドキュメント。

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

コンストラクター

名前 説明
CyclicBarrier(Int32, IRunnable)

指定された数のパーティー (スレッド) が待機しているときに移動し、バリアがトリップされたときに指定されたバリア アクションを実行する新しい CyclicBarrier を作成します。これは、バリアに入る最後のスレッドによって実行されます。

CyclicBarrier(Int32)

指定された数のパーティ (スレッド) が待機しているときにトリップする新しい CyclicBarrier を作成し、バリアがトリップされたときに定義済みのアクションを実行しません。

CyclicBarrier(IntPtr, JniHandleOwnership)

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

プロパティ

名前 説明
Class

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

(継承元 Object)
Handle

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

(継承元 Object)
IsBroken

このバリアが壊れた状態にある場合にクエリを実行します。

JniIdentityHashCode

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

(継承元 Object)
JniManagedPeerState

一連のスレッドが互いに共通のバリア ポイントに到達するまで待機できるようにする同期支援。

(継承元 JavaObject)
JniPeerMembers

一連のスレッドが互いに共通のバリア ポイントに到達するまで待機できるようにする同期支援。

NumberWaiting

バリアで現在待機しているパーティの数を返します。

Parties

このバリアをトリップするために必要な関係者の数を返します。

PeerReference

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

(継承元 Object)
ThresholdClass

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

ThresholdType

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

メソッド

名前 説明
Await()

すべての #getParties パーティがこのバリアで await を呼び出すまで待機します。

Await(Int64, TimeUnit)

すべての #getParties パーティがこのバリアで await を呼び出すか、指定した待機時間が経過するまで待機します。

AwaitAsync()

すべての関係者がこのバリアで await を呼び出すまで非同期的に待機します。

AwaitAsync(Int64, TimeUnit)

すべての関係者がこのバリアで await を呼び出すまで非同期的に待機します。

Clone()

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

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

一連のスレッドが互いに共通のバリア ポイントに到達するまで待機できるようにする同期支援。

(継承元 JavaObject)
Dispose()

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

(継承元 Object)
Dispose(Boolean)

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

(継承元 Object)
DisposeUnlessReferenced()

一連のスレッドが互いに共通のバリア ポイントに到達するまで待機できるようにする同期支援。

(継承元 JavaObject)
Equals(Object)

一連のスレッドが互いに共通のバリア ポイントに到達するまで待機できるようにする同期支援。

(継承元 JavaObject)
Equals(Object)

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

(継承元 Object)
GetHashCode()

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

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

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

(継承元 Object)
Notify()

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

(継承元 Object)
NotifyAll()

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

(継承元 Object)
Reset()

バリアを初期状態にリセットします。

SetHandle(IntPtr, JniHandleOwnership)

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

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

一連のスレッドが互いに共通のバリア ポイントに到達するまで待機できるようにする同期支援。

(継承元 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()

一連のスレッドが互いに共通のバリア ポイントに到達するまで待機できるようにする同期支援。

(継承元 JavaObject)
IJavaPeerable.Finalized()

一連のスレッドが互いに共通のバリア ポイントに到達するまで待機できるようにする同期支援。

(継承元 JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

一連のスレッドが互いに共通のバリア ポイントに到達するまで待機できるようにする同期支援。

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

一連のスレッドが互いに共通のバリア ポイントに到達するまで待機できるようにする同期支援。

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

一連のスレッドが互いに共通のバリア ポイントに到達するまで待機できるようにする同期支援。

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

一連のスレッドが互いに共通のバリア ポイントに到達するまで待機できるようにする同期支援。

(継承元 JavaObject)

拡張メソッド

名前 説明
GetJniTypeName(IJavaPeerable)

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

JavaAs<TResult>(IJavaPeerable)

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

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

一連のスレッドが互いに共通のバリア ポイントに到達するまで待機できるようにする同期支援。

TryJavaCast<TResult>(IJavaPeerable, TResult)

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

適用対象