AbstractQueuedSynchronizer.HasQueuedPredecessors プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
現在のスレッドよりも長い取得を待機しているスレッドがあるかどうかを照会します。
public bool HasQueuedPredecessors { [Android.Runtime.Register("hasQueuedPredecessors", "()Z", "")] get; }
[<get: Android.Runtime.Register("hasQueuedPredecessors", "()Z", "")>]
member this.HasQueuedPredecessors : bool
プロパティ値
true
現在のスレッドの前にキューに置かれたスレッドがあり、 false
現在のスレッドがキューの先頭にある場合、またはキューが空の場合
- 属性
注釈
現在のスレッドよりも長い取得を待機しているスレッドがあるかどうかを照会します。
このメソッドの呼び出しは と同等です (ただし、より効率的な場合があります)。
{@code
getFirstQueuedThread() != Thread.currentThread()
&& hasQueuedThreads()}
割り込みとタイムアウトによる取り消しは常に発生する可能性があるため、 true
戻り値は現在のスレッドの前に他のスレッドが取得されることを保証するものではありません。 同様に、キューが空であるため、このメソッドが を返した false
後に、別のスレッドが競合に勝ってエンキューする可能性があります。
このメソッドは、バージを回避するために、フェア シンクロナイザーによって使用されるように設計されています。 このようなシンクロナイザーの #tryAcquire
メソッドは を返 false
す必要があり #tryAcquireShared
、このメソッドが戻る場合 (これが再入可能な取得でない限り) は負の true
値を返す必要があります。 たとえば、 tryAcquire
フェア、再入可能、排他モード シンクロナイザーのメソッドは次のようになります。
{@code
protected boolean tryAcquire(int arg) {
if (isHeldExclusively()) {
// A reentrant acquire; increment hold count
return true;
} else if (hasQueuedPredecessors()) {
return false;
} else {
// try to acquire normally
}
}}
1.7 で追加されました。
の Java ドキュメント java.util.concurrent.locks.AbstractQueuedSynchronizer.hasQueuedPredecessors()
。
このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。