LockSupport クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。
[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
- 継承
- 属性
注釈
ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。
このクラスは、それを使用する各スレッドに許可 (クラスの意味で) を java.util.concurrent.Semaphore Semaphore
関連付けます。 のpark
呼び出しは、許可が使用可能な場合は直ちに返され、プロセスで使用されます。それ以外の場合<>は、may</em> ブロックです。 を unpark
呼び出すと、許可がまだ使用できない場合に使用できるようになります。 (ただし、セマフォとは異なり、許可は蓄積されません。最大 1 つがあります)。)信頼性の高い使用では、いつ駐車または駐車解除を行うかを制御するために、揮発性 (またはアトミック) 変数を使用する必要があります。 これらのメソッドの呼び出しの順序は、揮発性変数アクセスに関して維持されますが、必ずしも非揮発性変数アクセスとは限りません。
park
メソッドと は、unpark
非推奨のメソッドThread.resume
Thread.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.LockSupport
Java ドキュメント。
このページの一部は、によって作成および共有された作業に基づく変更であり、に記載されている条件に従って使用されます。
コンストラクター
LockSupport(IntPtr, JniHandleOwnership) |
JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。 |
プロパティ
Class |
この |
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) |
現在のスレッドの の呼び出し |
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) |
ロックやその他の同期クラスを作成するための基本的なスレッド ブロック プリミティブ。 |