- java.lang.Object
-
- java.util.concurrent.locks.AbstractOwnableSynchronizer
-
- java.util.concurrent.locks.AbstractQueuedLongSynchronizer
-
- すべての実装されたインタフェース:
Serializable
public abstract class AbstractQueuedLongSynchronizer extends AbstractOwnableSynchronizer implements Serializable
同期状態がlongとして保持される
AbstractQueuedSynchronizerのバージョンです。 このクラスには
AbstractQueuedSynchronizer
とまったく同じ構造体、プロパティ、およびメソッドがありますが、状態関連のすべてのパラメータと結果は、int
ではなくlong
として定義されている点が異なります。 このクラスは、複数レベルのロックやバリアーといった64ビットの状態が必要なシンクロナイザの作成時に有用であることがあります。使用上のノートや例については、
AbstractQueuedSynchronizer
を参照してください。- 導入されたバージョン:
- 1.6
- 関連項目:
- 直列化された形式
-
-
ネストされたクラスのサマリー
ネストされたクラス 修飾子と型 クラス 説明 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()
このシンクロナイザを取得しようとしているスレッドがあるかどうかを問い合わせます; つまり、取得メソッドがブロックされている場合です。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)
共有モードでの解放を反映するように、状態の設定を試みます。-
クラス java.util.concurrent.locks.AbstractOwnableSynchronizerで宣言されたメソッド
getExclusiveOwnerThread, setExclusiveOwnerThread
-
-
-
-
メソッドの詳細
-
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
- 排他モードがサポートされていない場合
-
tryAcquireShared
protected long tryAcquireShared(long arg)
共有モードでの取得を試みます。 このメソッドは、オブジェクトが共有モードでの取得を許可する状態にあるかどうかを照会し、許可する状態にあれば取得します。このメソッドは常に取得を実行するスレッドにより呼び出されます。 このメソッドが失敗をレポートし、かつスレッドがキューに入れられていない場合、取得メソッドは、ほかのスレッドからの解放により信号が送信されるまでそのスレッドをキューに入れることができます。
デフォルト実装は、
UnsupportedOperationException
をスローします。- パラメータ:
arg
- acquireの引数。 この値は、常にacquireメソッドに渡される値、または状態待機へのエントリで保存される値になる。 それ以外の場合、この値は未解釈となり、任意の値を表すことができる。- 戻り値:
- 失敗した場合は負の値。共有モードでの取得に成功したが、以後の共有モードでの取得に成功しない場合はゼロ。共有モードでの取得に成功し、以後の共有モードでの取得にも成功する可能性がある場合は正の値。正の値の場合、以後の待機スレッドで利用可能性をチェックする必要がある。 (3つの異なる戻り値のサポートにより、取得だけが時折排他的に動作するコンテキスト内でこのメソッドを使用することが可能になる。) 成功時には、このオブジェクトは取得済みである。
- 例外:
IllegalMonitorStateException
- 取得により、このシンクロナイザが不正な状態に置かれる場合。 同期が正しく機能するためには、この例外を一貫した方式でスローする必要がある。UnsupportedOperationException
- 共有モードがサポートされていない場合
-
tryReleaseShared
protected boolean tryReleaseShared(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)
から返される値
-
acquireShared
public final void acquireShared(long arg)
割込みを無視して、共有モードで取得します。 最初に一度以上tryAcquireShared(long)
を呼び出すことで実装され、成功時に復帰します。 それ以外の場合、スレッドはキューに入れられ、たいていの場合ブロックおよびブロック解除を何度も繰り返し、成功するまでtryAcquireShared(long)
を呼び出します。- パラメータ:
arg
- acquireの引数。 この値はtryAcquireShared(long)
に送信されるが、それ以外の場合は未解釈となり、任意の値を表すことができる。
-
acquireSharedInterruptibly
public final void acquireSharedInterruptibly(long arg) throws InterruptedException
共有モードで取得します。 最初に割込みステータスをチェックしてから一度以上tryAcquireShared(long)
を呼び出すことで実装され、成功時に復帰します。 それ以外の場合、スレッドはキューに入れられ、たいていの場合ブロックおよびブロック解除を何度も繰り返し、成功するかスレッドで割込みが発生するまでtryAcquireShared(long)
を呼び出します。- パラメータ:
arg
- acquireの引数。 この値はtryAcquireShared(long)
に送信されるが、それ以外の場合は未解釈となり、任意の値を表すことができる。- 例外:
InterruptedException
- 現在のスレッドで割込みが発生した場合
-
tryAcquireSharedNanos
public final boolean tryAcquireSharedNanos(long arg, long nanosTimeout) throws InterruptedException
共有モードで取得を試みます。割込みが発生した場合は中止し、指定されたタイム・アウト時間が経過した場合は失敗します。 最初に割込みステータスをチェックしてから一度以上tryAcquireShared(long)
を呼び出すことで実装され、成功時に復帰します。 それ以外の場合、スレッドはキューに入れられ、たいていの場合ブロックおよびブロック解除を何度も繰り返し、成功するかスレッドで割込みが発生するかタイムアウト時間が経過するまでtryAcquireShared(long)
を呼び出します。- パラメータ:
arg
- acquireの引数。 この値はtryAcquireShared(long)
に送信されるが、それ以外の場合は未解釈となり、任意の値を表すことができる。nanosTimeout
- 待機する最大ナノ秒数- 戻り値:
- 取得した場合は
true
、タイム・アウトした場合はfalse
- 例外:
InterruptedException
- 現在のスレッドで割込みが発生した場合
-
releaseShared
public final boolean releaseShared(long arg)
共有モードで解放します。tryReleaseShared(long)
がtrueを返す場合、1つ以上のスレッドをブロック解除することで実装されます。- パラメータ:
arg
- releaseの引数。 この値はtryReleaseShared(long)
に送信されるが、それ以外の場合は未解釈となり、任意の値を表すことができる。- 戻り値:
tryReleaseShared(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(int 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()
と同じプロパティを保持します。- 戻り値:
- スレッドのコレクション
-
getSharedQueuedThreads
public final Collection<Thread> getSharedQueuedThreads()
共有モードで取得するために待機中のスレッドを含むコレクションを返します。 これは、共有的取得のために待機中のスレッドのみを返すことを除いては、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の場合
-
-