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 で追加されました。
このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。