Language

Exchanger クラス

定義

スレッドがペア内の要素をペアにしてスワップできる同期ポイント。

[Android.Runtime.Register("java/util/concurrent/Exchanger", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "V" })]
public class Exchanger : Java.Lang.Object
[<Android.Runtime.Register("java/util/concurrent/Exchanger", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "V" })>]
type Exchanger = class
    inherit Object
継承
属性

注釈

スレッドがペア内の要素をペアにしてスワップできる同期ポイント。 各スレッドは、 #exchange exchange メソッドへのエントリでオブジェクトを提示し、パートナー スレッドと一致し、返されたパートナーのオブジェクトを受け取ります。 交換体は、 SynchronousQueueの双方向形式として見ることができます。 交換体は、遺伝的アルゴリズムやパイプライン設計などのアプリケーションで役立つ場合があります。

<b>Sample Usage:</b>Exchanger を使用してスレッド間でバッファーをスワップするクラスのハイライトを次に示します。バッファーを満たすスレッドは、必要なときに空にしたばかりのものを取得し、バッファーを空にするスレッドに渡します。

{@code
            class FillAndEmpty {
              Exchanger<DataBuffer> exchanger = new Exchanger<>();
              DataBuffer initialEmptyBuffer = ...; // a made-up type
              DataBuffer initialFullBuffer = ...;

              class FillingLoop implements Runnable {
                public void run() {
                  DataBuffer currentBuffer = initialEmptyBuffer;
                  try {
                    while (currentBuffer != null) {
                      addToBuffer(currentBuffer);
                      if (currentBuffer.isFull())
                        currentBuffer = exchanger.exchange(currentBuffer);
                    }
                  } catch (InterruptedException ex) { ... handle ...}
                }
              }

              class EmptyingLoop implements Runnable {
                public void run() {
                  DataBuffer currentBuffer = initialFullBuffer;
                  try {
                    while (currentBuffer != null) {
                      takeFromBuffer(currentBuffer);
                      if (currentBuffer.isEmpty())
                        currentBuffer = exchanger.exchange(currentBuffer);
                    }
                  } catch (InterruptedException ex) { ... handle ...}
                }
              }

              void start() {
                new Thread(new FillingLoop()).start();
                new Thread(new EmptyingLoop()).start();
              }
            }}

メモリ整合性効果: Exchangerを介してオブジェクトを正常に交換するスレッドのペアごとに、各スレッド内の exchange() の前のアクション <i>happen-before</i> 他のスレッドの対応する exchange() からの戻り値に続くアクションです。

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

Javaドキュメント。

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

コンストラクター

名前 説明
Exchanger()

新しい交換体を作成します。

Exchanger(IntPtr, JniHandleOwnership)

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

プロパティ

名前 説明
Class

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

(継承元 Object)
Handle

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

(継承元 Object)
JniIdentityHashCode

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

(継承元 Object)
JniManagedPeerState

スレッドがペア内の要素をペアにしてスワップできる同期ポイント。

(継承元 JavaObject)
JniPeerMembers

スレッドがペア内の要素をペアにしてスワップできる同期ポイント。

PeerReference

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

(継承元 Object)
ThresholdClass

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

ThresholdType

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

メソッド

名前 説明
Clone()

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

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

スレッドがペア内の要素をペアにしてスワップできる同期ポイント。

(継承元 JavaObject)
Dispose()

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

(継承元 Object)
Dispose(Boolean)

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

(継承元 Object)
DisposeUnlessReferenced()

スレッドがペア内の要素をペアにしてスワップできる同期ポイント。

(継承元 JavaObject)
Equals(Object)

スレッドがペア内の要素をペアにしてスワップできる同期ポイント。

(継承元 JavaObject)
Equals(Object)

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

(継承元 Object)
Exchange(Object, Int64, TimeUnit)

別のスレッドがこの交換ポイントに到達するまで待機し (現在のスレッドが Thread#interrupt interrupted または指定された待機時間が経過した場合を除く)、指定されたオブジェクトを転送し、そのオブジェクトを受け取ります。

Exchange(Object)

別のスレッドがこの交換ポイントに到達するまで待機します (現在のスレッドが Thread#interrupt が中断されている場合を除く)。その後、指定されたオブジェクトを転送し、そのオブジェクトを受け取ります。

GetHashCode()

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

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

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

(継承元 Object)
Notify()

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

(継承元 Object)
NotifyAll()

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

(継承元 Object)
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側で有効であることを確認します。

適用対象