LockSupport クラス

定義

ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。

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

注釈

ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。

このクラスは、それを使用する各スレッドに許可 (クラスの意味で) を java.util.concurrent.Semaphore Semaphore 関連付けます。 のpark呼び出しは、許可が使用可能な場合は直ちに返され、プロセスで使用されます。それ以外の場合<>は、may</em> ブロックです。 を unpark 呼び出すと、許可がまだ使用できない場合に使用できるようになります。 (ただし、セマフォとは異なり、許可は蓄積されません。最大 1 つがあります)。)信頼性の高い使用では、いつ駐車または駐車解除を行うかを制御するために、揮発性 (またはアトミック) 変数を使用する必要があります。 これらのメソッドの呼び出しの順序は、揮発性変数アクセスに関して維持されますが、必ずしも非揮発性変数アクセスとは限りません。

parkメソッドと は、unpark非推奨のメソッドThread.resumeThread.suspendを引き起こし、そのような目的で使用できない問題が発生しないスレッドをブロックおよびブロック解除する効率的な手段を提供します。1 つのスレッドを呼び出して別のスレッドを呼び出parkそうとunparkする間の競合は、許可により生き生きと維持されます。 さらに、 は、 park 呼び出し元のスレッドが中断され、タイムアウト バージョンがサポートされている場合に を返します。 メソッドは park 、"理由なし" の他の時点でもを返す可能性があるため、一般に、戻り時に条件を再確認するループ内で呼び出す必要があります。 この意味 park では、時間の回転を無駄にしないが、有効にするために と組み合わ unpark される必要がある "ビジー待機" の最適化として機能します。

それぞれの 3 つの形式では、 park オブジェクト パラメーターもサポート blocker されています。 このオブジェクトは、スレッドがブロックされている理由を特定するための監視ツールと診断ツールを許可するために、スレッドがブロックされている間に記録されます。 (このようなツールは、メソッド #getBlocker(Thread)を使用してブロッカーにアクセスする可能性があります)。このパラメーターを指定しない元のフォームではなく、これらのフォームを使用することを強くお勧めします。 ロック実装内で として blocker 指定する通常の引数は です this

これらのメソッドは、上位レベルの同期ユーティリティを作成するためのツールとして使用するように設計されており、それ自体はほとんどのコンカレンシー制御アプリケーションには役立ちません。 メソッドは park 、フォームの構築でのみ使用するように設計されています。

{@code
            while (!canProceed()) {
              // ensure request to unpark is visible to other threads
              ...
              LockSupport.park(this);
            }}

への呼び出し parkの前に、unpark への要求を発行するスレッドによるアクションがない場合は、ロックまたはブロックが必要です。 各スレッドに関連付けられている許可は 1 つだけなので、 の中間的な使用 (クラスの読み込みによる暗黙的な使用 parkを含む) により、応答しないスレッド ("失われた unpark") が発生する可能性があります。

<b>サンプル使用法。</b> 先入れ先出しの非再入可能ロック クラスのスケッチを次に示します。

{@code
            class FIFOMutex {
              private final AtomicBoolean locked = new AtomicBoolean(false);
              private final Queue<Thread> waiters
                = new ConcurrentLinkedQueue<>();

              public void lock() {
                boolean wasInterrupted = false;
                // publish current thread for unparkers
                waiters.add(Thread.currentThread());

                // Block while not first in queue or cannot acquire lock
                while (waiters.peek() != Thread.currentThread() ||
                       !locked.compareAndSet(false, true)) {
                  LockSupport.park(this);
                  // ignore interrupts while waiting
                  if (Thread.interrupted())
                    wasInterrupted = true;
                }

                waiters.remove();
                // ensure correct interrupt status on return
                if (wasInterrupted)
                  Thread.currentThread().interrupt();
              }

              public void unlock() {
                locked.set(false);
                LockSupport.unpark(waiters.peek());
              }

              static {
                // Reduce the risk of "lost unpark" due to classloading
                Class<?> ensureLoaded = LockSupport.class;
              }
            }}

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

java.util.concurrent.locks.LockSupportJava ドキュメント。

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

コンストラクター

LockSupport(IntPtr, JniHandleOwnership)

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

プロパティ

Class

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

(継承元 Object)
Handle

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

(継承元 Object)
JniIdentityHashCode

ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。

(継承元 Object)
JniPeerMembers

ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。

PeerReference

ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。

(継承元 Object)
ThresholdClass

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

ThresholdType

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

メソッド

Clone()

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

(継承元 Object)
Dispose()

ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。

(継承元 Object)
Dispose(Boolean)

ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。

(継承元 Object)
Equals(Object)

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

(継承元 Object)
GetBlocker(Thread)

まだブロック解除されていない park メソッドの最新の呼び出しに指定されたブロッカー オブジェクトを返します。ブロックされていない場合は null を返します。

GetHashCode()

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

(継承元 Object)
JavaFinalize()

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

(継承元 Object)
Notify()

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

(継承元 Object)
NotifyAll()

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

(継承元 Object)
Park()

許可が使用可能でない限り、スレッドのスケジュール設定のために現在のスレッドを無効にします。

Park(Object)

許可が使用可能でない限り、スレッドのスケジュール設定のために現在のスレッドを無効にします。

ParkNanos(Int64)

許可が使用可能でない限り、指定された待機時間まで、スレッドスケジュールのために現在のスレッドを無効にします。

ParkNanos(Object, Int64)

許可が使用可能でない限り、指定された待機時間まで、スレッドスケジュールのために現在のスレッドを無効にします。

ParkUntil(Int64)

許可が利用可能でない限り、指定された期限まで、スレッドスケジュールのために現在のスレッドを無効にします。

ParkUntil(Object, Int64)

許可が利用可能でない限り、指定された期限まで、スレッドスケジュールのために現在のスレッドを無効にします。

SetCurrentBlocker(Object)

現在のスレッドの の呼び出し #getBlocker getBlocker によって返される オブジェクトを設定します。

SetHandle(IntPtr, JniHandleOwnership)

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

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

ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。

(継承元 Object)
ToString()

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

(継承元 Object)
Unpark(Thread)

指定されたスレッドの許可を使用できるようにします (まだ使用できない場合)。

UnregisterFromRuntime()

ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。

(継承元 Object)
Wait()

現在のスレッドが起動するまで待機します。通常<は、通知</em> または>< em 中断</em によって待機します>。>

(継承元 Object)
Wait(Int64)

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

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

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

(継承元 Object)

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

IJavaPeerable.Disposed()

ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。

(継承元 Object)
IJavaPeerable.DisposeUnlessReferenced()

ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。

(継承元 Object)
IJavaPeerable.Finalized()

ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。

(継承元 Object)
IJavaPeerable.JniManagedPeerState

ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。

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

ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。

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

ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。

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

ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。

(継承元 Object)

拡張メソッド

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。

GetJniTypeName(IJavaPeerable)

ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。

適用対象