次の方法で共有


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.suspendを引き起こす問題が発生せず、そのような目的で使用できないスレッドをブロックおよびThread.resumeブロック解除する効率的な手段を提供します。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の前に、アンパーク要求を発行するスレッドによるアクションがロックまたはブロックを伴う場合。 各スレッドには許可が 1 つだけ関連付けられているため、クラスの park読み込みを介して暗黙的に含めて、中間的に使用すると、応答しないスレッド ("無パーク" ) が発生する可能性があります。

<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 ドキュメントjava.util.concurrent.locks.LockSupport

このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 2.5 属性ライセンスに記載されている条件に従って使用される作業に基づく変更です。

コンストラクター

LockSupport(IntPtr, JniHandleOwnership)

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

プロパティ

Class

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

(継承元 Object)
Handle

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

(継承元 Object)
JniIdentityHashCode

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

(継承元 Object)
JniPeerMembers

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

PeerReference

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

(継承元 Object)
ThresholdClass

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

ThresholdType

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

メソッド

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, Int32)

現在のスレッドが目覚めるまで待機します。通常<><は、通知/em> または <em>中断</em> によって、または一定のリアルタイムが経過するまで待機します。

(継承元 Object)
Wait(Int64)

現在のスレッドが目覚めるまで待機します。通常<><は、通知/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)

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

適用対象