JavaTM Platform
Standard Ed. 6

java.util.concurrent.locks
クラス AbstractQueuedLongSynchronizer

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 として定義されている点が異なります。このクラスは、複数レベルのロックやバリアーといった 16 ビットの状態が必要なシンクロナイザの作成時に有用であることがあります。

使用上の注意や例については、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()
          キュー内の最初の (待機時間のもっとも長い) スレッドを返します。
 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 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
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

コンストラクタの詳細

AbstractQueuedLongSynchronizer

protected AbstractQueuedLongSynchronizer()
ゼロの初期同期状態を使用して、新規 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 - 排他モードがサポートされていない場合

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 メソッドが呼び出されるごとに、このメソッドが呼び出されます (待機状態のメソッドでは release(long) が呼び出される)。

デフォルト実装は、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()
このシンクロナイザの取得で競合しているスレッドが存在するかどうか (つまり、acquire メソッドがブロックされたかどうか) を照会します。

この実装では、この操作は一定の時間で復帰します。

戻り値:
競合が存在する場合は true

getFirstQueuedThread

public final Thread getFirstQueuedThread()
キュー内の最初の (待機時間のもっとも長い) スレッドを返します。現在キューにスレッドが入っていない場合は null を返します。

通常、この実装では、この操作は一定時間で復帰します。ただし、ほかのスレッドがキューの変更を並行して実行している場合は、競合により処理を繰り返す場合があります。

戻り値:
キュー内の最初の (待機時間のもっとも長い) スレッド。現在キューにスレッドが入っていない場合は null

isQueued

public final boolean isQueued(Thread thread)
指定されたスレッドが、現在キューに入っている場合は true を返します。

この実装は、キューをトラバースして指定されたスレッドの存在を判別します。

パラメータ:
thread - スレッド
戻り値:
指定されたスレッドがキューに入っている場合は true
例外:
NullPointerException - スレッドが null の場合

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" が含まれます。

オーバーライド:
クラス Object 内の toString
戻り値:
このシンクロナイザおよびその状態を識別する文字列

owns

public final boolean owns(AbstractQueuedLongSynchronizer.ConditionObject condition)
指定された ConditionObject がこのシンクロナイザをロックとして使用するかどうかを照会します。

パラメータ:
condition - 状態
戻り値:
所有される場合は true
例外:
NullPointerException - condition が null の場合

hasWaiters

public final boolean hasWaiters(AbstractQueuedLongSynchronizer.ConditionObject condition)
このシンクロナイザに関連付けられた指定の状態で待機しているスレッドが存在するかどうかを照会します。タイムアウトおよび割り込みはいつでも発生する可能性があるため、true が返されても、将来 signal がスレッドを起動させることは保証されていません。このメソッドは、主にシステム状態の監視に使用する目的で設計されています。

パラメータ:
condition - 状態
戻り値:
待機中のスレッドが存在する場合は true
例外:
IllegalMonitorStateException - 排他的同期が保持されない場合
IllegalArgumentException - 指定された状態がこのシンクロナイザと関連付けられていない場合
NullPointerException - condition が null の場合

getWaitQueueLength

public final int getWaitQueueLength(AbstractQueuedLongSynchronizer.ConditionObject condition)
このシンクロナイザに関連付けられた指定の状態で待機しているスレッドの推定数を返します。タイムアウトおよび割り込みの発生する可能性はいつでも存在するため、推定数は、実際の待機者数に関する上限を示すに過ぎません。このメソッドは、同期の制御用としてではなく、システム状態の監視用として設計されています。

パラメータ:
condition - 状態
戻り値:
待機中のスレッドの推定数
例外:
IllegalMonitorStateException - 排他的同期が保持されない場合
IllegalArgumentException - 指定された状態がこのシンクロナイザと関連付けられていない場合
NullPointerException - condition が null の場合

getWaitingThreads

public final Collection<Thread> getWaitingThreads(AbstractQueuedLongSynchronizer.ConditionObject condition)
このシンクロナイザに関連付けられた指定の状態で待機中のスレッドを含むコレクションを返します。実際のスレッドセットは、結果の構築中にも動的に変化する可能性があるため、返されるコレクションは最善の努力を払った上での推定に過ぎません。返されるコレクションの要素には、特定の順序は存在しません。

パラメータ:
condition - 状態
戻り値:
スレッドのコレクション
例外:
IllegalMonitorStateException - 排他的同期が保持されない場合
IllegalArgumentException - 指定された状態がこのシンクロナイザと関連付けられていない場合
NullPointerException - condition が null の場合

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。