言語

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ドキュメント。

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

適用対象