public abstract class AbstractQueuedLongSynchronizer extends AbstractOwnableSynchronizer implements Serializable
として保持されるAbstractQueuedSynchronizerのバージョンです。このクラスにはAbstractQueuedSynchronizerとまったく同じ構造体、プロパティ、およびメソッドがありますが、状態関連のすべてのパラメータと結果は、intではなくlongとして定義されている点が異なります。このクラスは、複数レベルのロックやバリアーといった64ビットの状態が必要なシンクロナイザの作成時に有用であることがあります。
使用上の注意や例については、AbstractQueuedSynchronizerを参照してください。
| 修飾子と型 | クラスと説明 |
|---|---|
class |
AbstractQueuedLongSynchronizer.ConditionObject
Lock実装の基盤として機能するAbstractQueuedLongSynchronizerのCondition実装です。 |
| 修飾子 | コンストラクタと説明 |
|---|---|
protected |
AbstractQueuedLongSynchronizer()
ゼロの初期同期状態を使用して、新規
AbstractQueuedLongSynchronizerインスタンスを作成します。 |
| 修飾子と型 | メソッドと説明 |
|---|---|
void |
acquire(long arg)
割込みを無視して、排他モードで取得します。
|
void |
acquireInterruptibly(long arg)
排他モードで取得します。割込みが発生した場合は、中止します。
|
void |
acquireShared(long arg)
割込みを無視して、共有モードで取得します。
|
void |
acquireSharedInterruptibly(long arg)
共有モードで取得します。
|
protected boolean |
compareAndSetState(long expect, long update)
現在の状態値が予想される値に等しい場合、同期状態を指定された更新値に原子的に設定します。
|
Collection<Thread> |
getExclusiveQueuedThreads()
排他モードで取得するために待機中のスレッドを含むコレクションを返します。
|
Thread |
getFirstQueuedThread()
キュー内の最初の(待機時間のもっとも長い)スレッドを返します。現在キューにスレッドが入っていない場合は
nullを返します。 |
Collection<Thread> |
getQueuedThreads()
パーミットの取得を待機しているスレッドを含むコレクションを返します。
|
int |
getQueueLength()
パーミットの取得を待機しているスレッドの推定数を返します。
|
Collection<Thread> |
getSharedQueuedThreads()
共有モードで取得するために待機中のスレッドを含むコレクションを返します。
|
protected long |
getState()
同期状態の現在値を返します。
|
Collection<Thread> |
getWaitingThreads(AbstractQueuedLongSynchronizer.ConditionObject condition)
このシンクロナイザに関連付けられた指定の状態で待機中のスレッドを含むコレクションを返します。
|
int |
getWaitQueueLength(AbstractQueuedLongSynchronizer.ConditionObject condition)
このシンクロナイザに関連付けられた指定の状態で待機しているスレッドの推定数を返します。
|
boolean |
hasContended()
このシンクロナイザの取得で競合しているスレッドが存在するかどうか(つまり、acquireメソッドがブロックされたかどうか)を照会します。
|
boolean |
hasQueuedPredecessors()
現在のスレッドより長いスレッドを待機中のスレッドが存在するかどうかを紹介します。
|
boolean |
hasQueuedThreads()
パーミットの取得を待機中のスレッドが存在するかどうかを照会します。
|
boolean |
hasWaiters(AbstractQueuedLongSynchronizer.ConditionObject condition)
このシンクロナイザに関連付けられた指定の状態で待機しているスレッドが存在するかどうかを照会します。
|
protected boolean |
isHeldExclusively()
現在の(呼出し側の)スレッドに関して、同期が排他的に行われる場合は
trueを返します。 |
boolean |
isQueued(Thread thread)
指定されたスレッドが、現在キューに入っている場合はtrueを返します。
|
boolean |
owns(AbstractQueuedLongSynchronizer.ConditionObject condition)
指定されたConditionObjectがこのシンクロナイザをロックとして使用するかどうかを照会します。
|
boolean |
release(long arg)
排他モードで解放します。
|
boolean |
releaseShared(long arg)
共有モードで解放します。
|
protected void |
setState(long newState)
同期状態の値を設定します。
|
String |
toString()
シンクロナイザおよびその状態を識別する文字列を返します。
|
protected boolean |
tryAcquire(long arg)
排他モードでの取得を試みます。
|
boolean |
tryAcquireNanos(long arg, long nanosTimeout)
排他モードで取得を試みます。割込みが発生した場合は中止し、指定されたタイム・アウト時間が経過した場合は失敗します。
|
protected long |
tryAcquireShared(long arg)
共有モードでの取得を試みます。
|
boolean |
tryAcquireSharedNanos(long arg, long nanosTimeout)
共有モードで取得を試みます。割込みが発生した場合は中止し、指定されたタイム・アウト時間が経過した場合は失敗します。
|
protected boolean |
tryRelease(long arg)
排他モードでの解放を反映するように、状態の設定を試みます。
|
protected boolean |
tryReleaseShared(long arg)
共有モードでの解放を反映するように、状態の設定を試みます。
|
getExclusiveOwnerThread, setExclusiveOwnerThreadprotected AbstractQueuedLongSynchronizer()
AbstractQueuedLongSynchronizerインスタンスを作成します。protected final long getState()
volatile読込みのメモリー・セマンティクスを保持します。protected final void setState(long newState)
volatile書込みのメモリー・セマンティクスを保持します。newState - 新規状態値protected final boolean compareAndSetState(long expect,
long update)
volatile読み込みおよび書込みのメモリー・セマンティクスを保持します。expect - 予想される値update - 新しい値true。falseは、実際の値が予想される値と等価ではないことを示す。protected boolean tryAcquire(long arg)
このメソッドは常に取得を実行するスレッドにより呼び出されます。このメソッドが失敗をレポートし、かつスレッドがキューに入れられていない場合、取得メソッドは、ほかのスレッドからの解放により信号が送信されるまでそのスレッドをキューに入れることができます。これは、Lock.tryLock()メソッドの実装に使用できます。
デフォルト実装は、UnsupportedOperationExceptionをスローします。
arg - acquireの引数。この値は、常にacquireメソッドに渡される値、または状態待機へのエントリで保存される値になる。それ以外の場合、この値は未解釈となり、任意の値を表すことができる。true。成功時には、このオブジェクトは取得済みである。IllegalMonitorStateException - 取得により、このシンクロナイザが不正な状態に置かれる場合。同期が正しく機能するためには、この例外を一貫した方式でスローする必要がある。UnsupportedOperationException - 排他モードがサポートされていない場合protected boolean tryRelease(long arg)
このメソッドは、解放を実行するスレッドにより常に呼び出されます。
デフォルト実装は、UnsupportedOperationExceptionをスローします。
arg - releaseの引数。この値は、常にreleaseメソッドに渡される値、または状態待機へのエントリでの現在の状態値になる。それ以外の場合、この値は未解釈となり、任意の値を表すことができる。true、そうでない場合はfalse。IllegalMonitorStateException - 解放により、このシンクロナイザが不正な状態に置かれる場合。同期が正しく機能するためには、この例外を一貫した方式でスローする必要がある。UnsupportedOperationException - 排他モードがサポートされていない場合protected long tryAcquireShared(long arg)
このメソッドは常に取得を実行するスレッドにより呼び出されます。このメソッドが失敗をレポートし、かつスレッドがキューに入れられていない場合、取得メソッドは、ほかのスレッドからの解放により信号が送信されるまでそのスレッドをキューに入れることができます。
デフォルト実装は、UnsupportedOperationExceptionをスローします。
arg - acquireの引数。この値は、常にacquireメソッドに渡される値、または状態待機へのエントリで保存される値になる。それ以外の場合、この値は未解釈となり、任意の値を表すことができる。IllegalMonitorStateException - 取得により、このシンクロナイザが不正な状態に置かれる場合。同期が正しく機能するためには、この例外を一貫した方式でスローする必要がある。UnsupportedOperationException - 共有モードがサポートされていない場合protected boolean tryReleaseShared(long arg)
このメソッドは、解放を実行するスレッドにより常に呼び出されます。
デフォルト実装は、UnsupportedOperationExceptionをスローします。
arg - releaseの引数。この値は、常にreleaseメソッドに渡される値、または状態待機へのエントリでの現在の状態値になる。それ以外の場合、この値は未解釈となり、任意の値を表すことができる。true、そうでない場合はfalseIllegalMonitorStateException - 解放により、このシンクロナイザが不正な状態に置かれる場合。同期が正しく機能するためには、この例外を一貫した方式でスローする必要がある。UnsupportedOperationException - 共有モードがサポートされていない場合protected boolean isHeldExclusively()
trueを返します。非待機状態のAbstractQueuedLongSynchronizer.ConditionObjectメソッドが呼び出されるごとに、このメソッドが呼び出されます。(待機状態のメソッドではrelease(long)が呼び出される。)
デフォルト実装は、UnsupportedOperationExceptionをスローします。このメソッドは、AbstractQueuedLongSynchronizer.ConditionObjectメソッドで内部的にのみ呼び出されるため、状態が使用されない場合は定義する必要がありません。
true、そうでない場合はfalseUnsupportedOperationException - 状態がサポートされない場合public final void acquire(long arg)
tryAcquire(long)を呼び出すことで実装され、成功時に復帰します。それ以外の場合、スレッドはキューに入れられ、たいていの場合ブロックおよびブロック解除を何度も繰り返し、成功するまでtryAcquire(long)を呼び出します。このメソッドは、Lock.lock()メソッドの実装に使用できます。arg - acquireの引数。この値はtryAcquire(long)に送信されるが、それ以外の場合は未解釈となり、任意の値を表すことができる。public final void acquireInterruptibly(long arg)
throws InterruptedException
tryAcquire(long)を呼び出すことで実装され、成功時に復帰します。それ以外の場合、スレッドはキューに入れられ、たいていの場合ブロックおよびブロック解除を何度も繰り返し、成功するかスレッドで割込みが発生するまでtryAcquire(long)を呼び出します。このメソッドは、Lock.lockInterruptibly()メソッドの実装に使用できます。arg - acquireの引数。この値はtryAcquire(long)に送信されるが、それ以外の場合は未解釈となり、任意の値を表すことができる。InterruptedException - 現在のスレッドで割込みが発生した場合public final boolean tryAcquireNanos(long arg,
long nanosTimeout)
throws InterruptedException
tryAcquire(long)を呼び出すことで実装され、成功時に復帰します。それ以外の場合、スレッドはキューに入れられ、たいていの場合ブロックおよびブロック解除を何度も繰り返し、成功するかスレッドで割込みが発生するかタイムアウト時間が経過するまでtryAcquire(long)を呼び出します。このメソッドは、Lock.tryLock(long, TimeUnit)メソッドの実装に使用できます。arg - acquireの引数。この値はtryAcquire(long)に送信されるが、それ以外の場合は未解釈となり、任意の値を表すことができる。nanosTimeout - 待機する最大ナノ秒数true、タイム・アウトした場合はfalseInterruptedException - 現在のスレッドで割込みが発生した場合public final boolean release(long arg)
tryRelease(long)がtrueを返す場合、1つ以上のスレッドをブロック解除することで実装されます。このメソッドは、Lock.unlock()メソッドの実装に使用できます。arg - releaseの引数。この値はtryRelease(long)に送信されるが、それ以外の場合は未解釈となり、任意の値を表すことができる。tryRelease(long)から返される値public final void acquireShared(long arg)
tryAcquireShared(long)を呼び出すことで実装され、成功時に復帰します。それ以外の場合、スレッドはキューに入れられ、たいていの場合ブロックおよびブロック解除を何度も繰り返し、成功するまでtryAcquireShared(long)を呼び出します。arg - acquireの引数。この値はtryAcquireShared(long)に送信されるが、それ以外の場合は未解釈となり、任意の値を表すことができる。public final void acquireSharedInterruptibly(long arg)
throws InterruptedException
tryAcquireShared(long)を呼び出すことで実装され、成功時に復帰します。それ以外の場合、スレッドはキューに入れられ、たいていの場合ブロックおよびブロック解除を何度も繰り返し、成功するかスレッドで割込みが発生するまでtryAcquireShared(long)を呼び出します。arg - acquireの引数。この値はtryAcquireShared(long)に送信されるが、それ以外の場合は未解釈となり、任意の値を表すことができる。InterruptedException - 現在のスレッドで割込みが発生した場合public final boolean tryAcquireSharedNanos(long arg,
long nanosTimeout)
throws InterruptedException
tryAcquireShared(long)を呼び出すことで実装され、成功時に復帰します。それ以外の場合、スレッドはキューに入れられ、たいていの場合ブロックおよびブロック解除を何度も繰り返し、成功するかスレッドで割込みが発生するかタイムアウト時間が経過するまでtryAcquireShared(long)を呼び出します。arg - acquireの引数。この値はtryAcquireShared(long)に送信されるが、それ以外の場合は未解釈となり、任意の値を表すことができる。nanosTimeout - 待機する最大ナノ秒数true、タイム・アウトした場合はfalseInterruptedException - 現在のスレッドで割込みが発生した場合public final boolean releaseShared(long arg)
tryReleaseShared(long)がtrueを返す場合、1つ以上のスレッドをブロック解除することで実装されます。arg - releaseの引数。この値はtryReleaseShared(long)に送信されるが、それ以外の場合は未解釈となり、任意の値を表すことができる。tryReleaseShared(long)から返される値public final boolean hasQueuedThreads()
trueが返されてもほかのスレッドが取得を実行することは保証されません。
この実装では、この操作は一定の時間で復帰します。
truepublic final boolean hasContended()
この実装では、この操作は一定の時間で復帰します。
truepublic final Thread getFirstQueuedThread()
nullを返します。
通常、この実装では、この操作は一定時間で復帰します。ただし、ほかのスレッドがキューの変更を並行して実行している場合は、競合により処理を繰り返す場合があります。
nullpublic final boolean isQueued(Thread thread)
この実装は、キューをトラバースして指定されたスレッドの存在を判別します。
thread - スレッドtrueNullPointerException - スレッドがnullの場合public final boolean hasQueuedPredecessors()
このメソッドの呼出しは、次と同等です(ただし、効率的である場合があります)。
getFirstQueuedThread() != Thread.currentThread() &&
hasQueuedThreads()
いずれかの時点で割り込みおよびタイム・アウトによる取消しが発生した場合、trueが返されても、ほかのスレッドが現在のスレッドよりも前に取得を実行することは保証されません。同様に、このメソッドがfalseを返したあと、キューが空であることが原因で、別のスレッドがエンキューの競争に勝つ可能性もあります。
このメソッドは、バージ(barging) を回避するために公平なシンクロナイザによって使用されるためのものです。そのようなシンクロナイザのtryAcquire(long)メソッドはfalseを返し、このメソッドがtrueを返す場合、そのtryAcquireShared(long)メソッドは負の値を返すはずです(これが再入可能な取得である場合を除く)。たとえば、公平で再入可能な排他モードのシンクロナイザのtryAcquireメソッドは、次のようになります。
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
}
}true、現在のスレッドがキューの先頭にあるか、キューが空の場合はfalsepublic final int getQueueLength()
public final Collection<Thread> getQueuedThreads()
public final Collection<Thread> getExclusiveQueuedThreads()
getQueuedThreads()と同じプロパティを保持します。public final Collection<Thread> getSharedQueuedThreads()
getQueuedThreads()と同じプロパティを保持します。public String toString()
"State ="に続いてgetState()の現在値、およびキューが空かどうかに応じて"nonempty"または"empty"が含まれます。public final boolean owns(AbstractQueuedLongSynchronizer.ConditionObject condition)
condition - 状態trueNullPointerException - 状態がnullの場合public final boolean hasWaiters(AbstractQueuedLongSynchronizer.ConditionObject condition)
trueが返されても、将来signalがスレッドを起動させることは保証されていません。このメソッドは、主にシステム状態の監視に使用する目的で設計されています。condition - 状態trueIllegalMonitorStateException - 排他的同期が保持されない場合IllegalArgumentException - 指定された状態がこのシンクロナイザと関連付けられていない場合NullPointerException - 状態がnullの場合public final int getWaitQueueLength(AbstractQueuedLongSynchronizer.ConditionObject condition)
condition - 状態IllegalMonitorStateException - 排他的同期が保持されない場合IllegalArgumentException - 指定された状態がこのシンクロナイザと関連付けられていない場合NullPointerException - 状態がnullの場合public final Collection<Thread> getWaitingThreads(AbstractQueuedLongSynchronizer.ConditionObject condition)
condition - 状態IllegalMonitorStateException - 排他的同期が保持されない場合IllegalArgumentException - 指定された状態がこのシンクロナイザと関連付けられていない場合NullPointerException - 状態がnullの場合 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.