- すべての実装されたインタフェース:
Serializable
として保持される
AbstractQueuedSynchronizer
のバージョンです。 このクラスにはAbstractQueuedSynchronizer
とまったく同じ構造体、プロパティ、およびメソッドがありますが、状態関連のすべてのパラメータと結果は、int
ではなくlong
として定義されている点が異なります。 このクラスは、複数レベルのロックやバリアーといった64ビットの状態が必要なシンクロナイザの作成時に有用であることがあります。
使用上のノートや例については、AbstractQueuedSynchronizer
を参照してください。
- 導入されたバージョン:
- 1.6
- 関連項目:
-
ネストされたクラスのサマリー
-
コンストラクタのサマリー
-
メソッドのサマリー
修飾子と型メソッド説明final void
acquire
(long arg) 割込みを無視して、排他モードで取得します。final void
acquireInterruptibly
(long arg) 排他モードで取得します。割込みが発生した場合は、中止します。final void
acquireShared
(long arg) 割込みを無視して、共有モードで取得します。final void
acquireSharedInterruptibly
(long arg) 共有モードで取得します。protected final boolean
compareAndSetState
(long expect, long update) 現在の状態値が予想される値に等しい場合、同期状態を指定された更新値に原子的に設定します。final Collection<Thread>
排他モードで取得するために待機中のスレッドを含むコレクションを返します。final Thread
キュー内の最初の(待機時間のもっとも長い)スレッドを返します。現在キューにスレッドが入っていない場合はnull
を返します。final Collection<Thread>
パーミットの取得を待機しているスレッドを含むコレクションを返します。final int
パーミットの取得を待機しているスレッドの推定数を返します。final Collection<Thread>
共有モードで取得するために待機中のスレッドを含むコレクションを返します。protected final long
getState()
同期状態の現在値を返します。final Collection<Thread>
このシンクロナイザに関連付けられた指定の状態で待機中のスレッドを含むコレクションを返します。final int
このシンクロナイザに関連付けられた指定の状態で待機しているスレッドの推定数を返します。final boolean
このシンクロナイザを取得しようとしているスレッドがあるかどうかを問い合わせます; つまり、取得メソッドがブロックされている場合です。final boolean
現在のスレッドより長いスレッドを待機中のスレッドが存在するかどうかを紹介します。final boolean
パーミットの取得を待機中のスレッドが存在するかどうかを照会します。final boolean
このシンクロナイザに関連付けられた指定の状態で待機しているスレッドが存在するかどうかを照会します。protected boolean
現在の(呼出し側の)スレッドに関して、同期が排他的に行われる場合はtrue
を返します。final boolean
指定されたスレッドが、現在キューに入っている場合はtrueを返します。final boolean
指定されたConditionObjectがこのシンクロナイザをロックとして使用するかどうかを照会します。final boolean
release
(long arg) 排他モードで解放します。final boolean
releaseShared
(long arg) 共有モードで解放します。protected final void
setState
(long newState) 同期状態の値を設定します。toString()
シンクロナイザおよびその状態を識別する文字列を返します。protected boolean
tryAcquire
(long arg) 排他モードでの取得を試みます。final boolean
tryAcquireNanos
(long arg, long nanosTimeout) 排他モードで取得を試みます。割込みが発生した場合は中止し、指定されたタイム・アウト時間が経過した場合は失敗します。protected long
tryAcquireShared
(long arg) 共有モードでの取得を試みます。final boolean
tryAcquireSharedNanos
(long arg, long nanosTimeout) 共有モードで取得を試みます。割込みが発生した場合は中止し、指定されたタイム・アウト時間が経過した場合は失敗します。protected boolean
tryRelease
(long arg) 排他モードでの解放を反映するように、状態の設定を試みます。protected boolean
tryReleaseShared
(long arg) 共有モードでの解放を反映するように、状態の設定を試みます。クラス java.util.concurrent.locks.AbstractOwnableSynchronizerで宣言されたメソッド
getExclusiveOwnerThread, setExclusiveOwnerThread
-
コンストラクタの詳細
-
AbstractQueuedLongSynchronizer
public AbstractQueuedLongSynchronizer()サブクラスが呼び出すためのコンストラクタ。
-
-
メソッドの詳細
-
getState
protected final long getState()同期状態の現在値を返します。 この操作は、volatile
読込みのメモリー・セマンティクスを保持します。- 戻り値:
- 現在の状態値
-
setState
protected final void setState(long newState) 同期状態の値を設定します。 この操作は、volatile
書込みのメモリー・セマンティクスを保持します。- パラメータ:
newState
- 新規状態値
-
compareAndSetState
protected final boolean compareAndSetState(long expect, long update) 現在の状態値が予想される値に等しい場合、同期状態を指定された更新値に原子的に設定します。 この操作は、volatile
読み込みおよび書込みのメモリー・セマンティクスを保持します。- パラメータ:
expect
- 予想される値update
- 新しい値- 戻り値:
- 成功する場合は
true
。 falseは、実際の値が予想される値と等価ではないことを示す。
-
tryAcquire
protected boolean tryAcquire(long arg) 排他モードでの取得を試みます。 このメソッドは、オブジェクトが排他モードでの取得を許可する状態にあるかどうかを照会し、許可する状態にあれば取得します。このメソッドは常に取得を実行するスレッドにより呼び出されます。 このメソッドが失敗をレポートし、かつスレッドがキューに入れられていない場合、取得メソッドは、ほかのスレッドからの解放により信号が送信されるまでそのスレッドをキューに入れることができます。 これは、
Lock.tryLock()
メソッドの実装に使用できます。デフォルト実装は、
UnsupportedOperationException
をスローします。- パラメータ:
arg
- acquireの引数。 この値は、常にacquireメソッドに渡される値、または状態待機へのエントリで保存される値になる。 それ以外の場合、この値は未解釈となり、任意の値を表すことができる。- 戻り値:
- 成功する場合は
true
。 成功時には、このオブジェクトは取得済みである。 - 例外:
IllegalMonitorStateException
- 取得により、このシンクロナイザが不正な状態に置かれる場合。 同期が正しく機能するためには、この例外を一貫した方式でスローする必要がある。UnsupportedOperationException
- 排他モードがサポートされていない場合
-
tryRelease
protected boolean tryRelease(long arg) 排他モードでの解放を反映するように、状態の設定を試みます。このメソッドは、解放を実行するスレッドにより常に呼び出されます。
デフォルト実装は、
UnsupportedOperationException
をスローします。- パラメータ:
arg
- releaseの引数。 この値は、常にreleaseメソッドに渡される値、または状態待機へのエントリでの現在の状態値になる。 それ以外の場合、この値は未解釈となり、任意の値を表すことができる。- 戻り値:
- 待機中の任意のスレッドが取得を試みることができるように、このオブジェクトが完全に解放された状態にある場合は
true
、そうでない場合はfalse
。 - 例外:
IllegalMonitorStateException
- 解放により、このシンクロナイザが不正な状態に置かれる場合。 同期が正しく機能するためには、この例外を一貫した方式でスローする必要がある。UnsupportedOperationException
- 排他モードがサポートされていない場合
-
isHeldExclusively
protected boolean isHeldExclusively()現在の(呼出し側の)スレッドに関して、同期が排他的に行われる場合はtrue
を返します。 このメソッドは、AbstractQueuedLongSynchronizer.ConditionObject
メソッドを呼び出すたびに呼び出されます。デフォルト実装は、
UnsupportedOperationException
をスローします。 このメソッドは、AbstractQueuedLongSynchronizer.ConditionObject
メソッドで内部的にのみ呼び出されるため、状態が使用されない場合は定義する必要がありません。- 戻り値:
- 同期が排他的に行われる場合は
true
、そうでない場合はfalse
- 例外:
UnsupportedOperationException
- 状態がサポートされない場合
-
acquire
public final void acquire(long arg) 割込みを無視して、排他モードで取得します。 一度以上tryAcquire(long)
を呼び出すことで実装され、成功時に復帰します。 それ以外の場合、スレッドはキューに入れられ、たいていの場合ブロックおよびブロック解除を何度も繰り返し、成功するまでtryAcquire(long)
を呼び出します。 このメソッドは、Lock.lock()
メソッドの実装に使用できます。- パラメータ:
arg
- acquireの引数。 この値はtryAcquire(long)
に送信されるが、それ以外の場合は未解釈となり、任意の値を表すことができる。
-
acquireInterruptibly
public final void acquireInterruptibly(long arg) throws InterruptedException 排他モードで取得します。割込みが発生した場合は、中止します。 最初に割込みステータスをチェックしてから一度以上tryAcquire(long)
を呼び出すことで実装され、成功時に復帰します。 それ以外の場合、スレッドはキューに入れられ、たいていの場合ブロックおよびブロック解除を何度も繰り返し、成功するかスレッドで割込みが発生するまでtryAcquire(long)
を呼び出します。 このメソッドは、Lock.lockInterruptibly()
メソッドの実装に使用できます。- パラメータ:
arg
- acquireの引数。 この値はtryAcquire(long)
に送信されるが、それ以外の場合は未解釈となり、任意の値を表すことができる。- 例外:
InterruptedException
- 現在のスレッドで割込みが発生した場合
-
tryAcquireNanos
public final boolean tryAcquireNanos(long arg, long nanosTimeout) throws InterruptedException 排他モードで取得を試みます。割込みが発生した場合は中止し、指定されたタイム・アウト時間が経過した場合は失敗します。 最初に割込みステータスをチェックしてから一度以上tryAcquire(long)
を呼び出すことで実装され、成功時に復帰します。 それ以外の場合、スレッドはキューに入れられ、たいていの場合ブロックおよびブロック解除を何度も繰り返し、成功するかスレッドで割込みが発生するかタイムアウト時間が経過するまでtryAcquire(long)
を呼び出します。 このメソッドは、Lock.tryLock(long, TimeUnit)
メソッドの実装に使用できます。- パラメータ:
arg
- acquireの引数。 この値はtryAcquire(long)
に送信されるが、それ以外の場合は未解釈となり、任意の値を表すことができる。nanosTimeout
- 待機する最大ナノ秒数- 戻り値:
- 取得した場合は
true
、タイム・アウトした場合はfalse
- 例外:
InterruptedException
- 現在のスレッドで割込みが発生した場合
-
release
public final boolean release(long arg) 排他モードで解放します。tryRelease(long)
がtrueを返す場合、1つ以上のスレッドをブロック解除することで実装されます。 このメソッドは、Lock.unlock()
メソッドの実装に使用できます。- パラメータ:
arg
- releaseの引数。 この値はtryRelease(long)
に送信されるが、それ以外の場合は未解釈となり、任意の値を表すことができる。- 戻り値:
tryRelease(long)
から返される値
-
hasQueuedThreads
public final boolean hasQueuedThreads()パーミットの取得を待機中のスレッドが存在するかどうかを照会します。 いずれかの時点で割り込みおよびタイム・アウトによる取消しが発生した場合、true
が返されてもほかのスレッドが取得を実行することは保証されません。- 戻り値:
- 取得を待機中のほかのスレッドが存在する可能性がある場合は
true
-
hasContended
public final boolean hasContended()このシンクロナイザを取得しようとしているスレッドがあるかどうかを問い合わせます; つまり、取得メソッドがブロックされている場合です。この実装では、この操作は一定の時間で復帰します。
- 戻り値:
- 競合が存在する場合は
true
-
getFirstQueuedThread
public final Thread getFirstQueuedThread()キュー内の最初の(待機時間のもっとも長い)スレッドを返します。現在キューにスレッドが入っていない場合はnull
を返します。通常、この実装では、この操作は一定時間で復帰します。ただし、ほかのスレッドがキューの変更を並行して実行している場合は、競合により処理を繰り返す場合があります。
- 戻り値:
- キュー内の最初の(待機時間のもっとも長い)スレッド。現在キューにスレッドが入っていない場合は
null
-
isQueued
public final boolean isQueued(Thread thread) 指定されたスレッドが、現在キューに入っている場合はtrueを返します。この実装は、キューをトラバースして指定されたスレッドの存在を判別します。
- パラメータ:
thread
- スレッド- 戻り値:
- 指定されたスレッドがキューに入っている場合は
true
- 例外:
NullPointerException
- スレッドがnullの場合
-
hasQueuedPredecessors
public final boolean hasQueuedPredecessors()現在のスレッドより長いスレッドを待機中のスレッドが存在するかどうかを紹介します。このメソッドの呼出しは、次と同等です(ただし、効率的である場合があります)。
getFirstQueuedThread() != Thread.currentThread() && hasQueuedThreads()
いずれかの時点で割り込みおよびタイム・アウトによる取消しが発生した場合、
true
が返されても、ほかのスレッドが現在のスレッドよりも前に取得を実行することは保証されません。 同様に、このメソッドがfalse
を返したあと、キューが空であることが原因で、別のスレッドがエンキューの競争に勝つ可能性もあります。このメソッドは、バージ(barging) を回避するために公平なシンクロナイザによって使用されるためのものです。 そのようなシンクロナイザの
tryAcquire(long)
メソッドはfalse
を返し、このメソッドがtrue
を返す場合、そのtryAcquireShared(long)
メソッドは負の値を返すはずです(これが再入可能な取得である場合を除く)。 たとえば、公平で再入可能な排他モードのシンクロナイザのtryAcquire
メソッドは、次のようになります。protected boolean tryAcquire(long arg) { if (isHeldExclusively()) { // A reentrant acquire; increment hold count return true; } else if (hasQueuedPredecessors()) { return false; } else { // try to acquire normally } }
- 戻り値:
- 現在のスレッドよりも前にキューに入れられたスレッドがある場合は
true
、現在のスレッドがキューの先頭にあるか、キューが空の場合はfalse
- 導入されたバージョン:
- 1.7
-
getQueueLength
public final int getQueueLength()パーミットの取得を待機しているスレッドの推定数を返します。 このメソッドが内部のデータ構造をトラバースしている間にも、スレッド数が動的に変化する場合があるため、この値は推定に過ぎません。 このメソッドは、同期の制御用としてではなく、システム状態の監視用として設計されています。- 戻り値:
- 取得を待機しているスレッドの推定数
-
getQueuedThreads
public final Collection<Thread> getQueuedThreads()パーミットの取得を待機しているスレッドを含むコレクションを返します。 実際のスレッド・セットは、結果の構築中にも動的に変化する可能性があるため、返されるコレクションは最善の努力を払った上での推定に過ぎません。 返されるコレクションの要素には、特定の順序は存在しません。 このメソッドは、より包括的な監視機能を提供するサブクラスの構築を容易にする目的で設計されています。- 戻り値:
- スレッドのコレクション
-
getExclusiveQueuedThreads
public final Collection<Thread> getExclusiveQueuedThreads()排他モードで取得するために待機中のスレッドを含むコレクションを返します。 これは、排他的取得のために待機中のスレッドのみを返すことを除いては、getQueuedThreads()
と同じプロパティを保持します。- 戻り値:
- スレッドのコレクション
-
toString
public String toString()シンクロナイザおよびその状態を識別する文字列を返します。 状態は括弧で囲まれ、文字列"State ="
に続いてgetState()
の現在値、およびキューが空かどうかに応じて"nonempty"
または"empty"
が含まれます。 -
owns
public final boolean owns(AbstractQueuedLongSynchronizer.ConditionObject condition) 指定されたConditionObjectがこのシンクロナイザをロックとして使用するかどうかを照会します。- パラメータ:
condition
- 状態- 戻り値:
- 所有される場合は
true
- 例外:
NullPointerException
- 状態がnullの場合
-
hasWaiters
public final boolean hasWaiters(AbstractQueuedLongSynchronizer.ConditionObject condition) このシンクロナイザに関連付けられた指定の状態で待機しているスレッドが存在するかどうかを照会します。 タイム・アウトおよび割込みはいつでも発生する可能性があるため、true
が返されても、将来signal
がスレッドを起動させることは保証されていません。 このメソッドは、主にシステム状態の監視に使用する目的で設計されています。- パラメータ:
condition
- 状態- 戻り値:
- 待機中のスレッドが存在する場合は
true
- 例外:
IllegalMonitorStateException
- 排他的同期が保持されない場合IllegalArgumentException
- 指定された状態がこのシンクロナイザと関連付けられていない場合NullPointerException
- 状態がnullの場合
-
getWaitQueueLength
public final int getWaitQueueLength(AbstractQueuedLongSynchronizer.ConditionObject condition) このシンクロナイザに関連付けられた指定の状態で待機しているスレッドの推定数を返します。 タイム・アウトおよび割り込みの発生する可能性はいつでも存在するため、推定数は、実際の待機者数に関する上限を示すに過ぎません。 このメソッドは、同期の制御用としてではなく、システム状態の監視用として設計されています。- パラメータ:
condition
- 状態- 戻り値:
- 待機中のスレッドの推定数
- 例外:
IllegalMonitorStateException
- 排他的同期が保持されない場合IllegalArgumentException
- 指定された状態がこのシンクロナイザと関連付けられていない場合NullPointerException
- 状態がnullの場合
-
getWaitingThreads
public final Collection<Thread> getWaitingThreads(AbstractQueuedLongSynchronizer.ConditionObject condition) このシンクロナイザに関連付けられた指定の状態で待機中のスレッドを含むコレクションを返します。 実際のスレッド・セットは、結果の構築中にも動的に変化する可能性があるため、返されるコレクションは最善の努力を払った上での推定に過ぎません。 返されるコレクションの要素には、特定の順序は存在しません。- パラメータ:
condition
- 状態- 戻り値:
- スレッドのコレクション
- 例外:
IllegalMonitorStateException
- 排他的同期が保持されない場合IllegalArgumentException
- 指定された状態がこのシンクロナイザと関連付けられていない場合NullPointerException
- 状態がnullの場合
-