AbstractQueuedSynchronizer.HasQueuedPredecessors プロパティ

定義

現在のスレッドよりも長い取得を待機しているスレッドがあるかどうかを照会します。

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()

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

適用対象