- すべての実装されたインタフェース:
Serializable
,Lock
- 含まれているクラス:
- ReentrantReadWriteLock
ReentrantReadWriteLock.writeLock()
メソッドによって返されたロックです。- 関連項目:
- 直列化された形式
-
コンストラクタのサマリー
-
メソッドのサマリー
修飾子と型メソッド説明int
現在のスレッドの、この書込みロックに対する保持数を照会します。boolean
現在のスレッドがこの書込みロックを保持しているかどうかを照会します。void
lock()
書込みロックを取得します。void
現在のスレッドに割り込みが発生しないかぎり、書込みロックを取得します。toString()
このロックおよびその状態を識別する文字列を返します。boolean
tryLock()
呼出し時に別のスレッドにより保持されていない場合のみに、書込みロックを取得します。boolean
指定された待機時間内に別のスレッドがロックを保持せず、現在のスレッドで割り込みが発生していない場合に、書込みロックを取得します。void
unlock()
このロックの解放を試みます。
-
コンストラクタの詳細
-
WriteLock
protected WriteLock(ReentrantReadWriteLock lock)サブクラスにより使用されるコンストラクタです。- パラメータ:
lock
- 外部のロック・オブジェクト- 例外:
NullPointerException
- lockがnullの場合
-
-
メソッドの詳細
-
lock
public void lock()書込みロックを取得します。読込みロックまたは書込みロックのいずれも別のスレッドに保持されていない場合、書込みロックを取得してただちに復帰し、書込みロックの保持カウントを1に設定します。
現在のスレッドが書込みロックをすでに保持している場合、保持カウントの値を1増分して、メソッドをただちに復帰します。
ロックが別のスレッドにより保持されている場合、現在のスレッドがスレッド・スケジューリングに関して無効になり、書込みロックが取得されるまで待機します。ロックが取得されると、書込みロック保持カウントが1に設定されます。
-
lockInterruptibly
public void lockInterruptibly() throws InterruptedException現在のスレッドに割り込みが発生しないかぎり、書込みロックを取得します。読込みロックまたは書込みロックのいずれも別のスレッドに保持されていない場合、書込みロックを取得してただちに復帰し、書込みロックの保持カウントを1に設定します。
現在のスレッドがロックをすでに保持している場合、保持カウントの値を1増分して、メソッドをただちに復帰します。
ロックが別のスレッドにより保持されている場合、現在のスレッドはスレッドのスケジューリングに関して無効になり、次の2つのいずれかが起きるまで待機します。
- 現在のスレッドにより書込みロックが取得される。
- ほかのスレッドが現在のスレッドに割り込みを行う。
書込みロックが現在のスレッドにより取得された場合、ロック保持カウントが1に設定されます。
現在のスレッドで、
- このメソッドへのエントリ上で設定された割込みステータスが保持されるか、
- 書込みロックの取得中に割り込みが発生した場合、
InterruptedException
がスローされ、現在のスレッドの割込みステータスがクリアされます。このメソッドは明示的な割込みポイントであるため、この実装では、通常または再入可能なロック取得への割り込みへの応答に高い優先度が与えられます。
- 定義:
lockInterruptibly
、インタフェース:Lock
- 例外:
InterruptedException
- 現在のスレッドで割込みが発生した場合
-
tryLock
public boolean tryLock()呼出し時に別のスレッドにより保持されていない場合のみに、書込みロックを取得します。別のスレッドが書込みロックと読込みロックのいずれも保持していない場合に書込みロックを取得し、値
true
でただちに復帰して、ロック保持カウントを1に設定します。 このロックが公平順序付けポリシーを使用するように設定されている場合でも、ロックが使用可能であれば、ほかのスレッドが現在書込みロックを待機しているかどうかには関係なく、tryLock()
の呼出しによってそのロックがただちに取得されます。 この「バージ」(barging)動作により公平性が失われるとは言え、これは特定の状況下で有用です。 このロックの公平性設定を尊重する場合は、ほぼ等価なtryLock(0, TimeUnit.SECONDS)
を使用します(これも割込みを検出する)。現在のスレッドがロックをすでに保持している場合、保持カウントの値を1増分して、メソッドは
true
を返します。ロックが別のスレッドにより保持されている場合、このメソッドは、値
false
でただちに復帰します。 -
tryLock
public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException指定された待機時間内に別のスレッドがロックを保持せず、現在のスレッドで割り込みが発生していない場合に、書込みロックを取得します。別のスレッドが書込みロックと読込みロックのいずれも保持していない場合に書込みロックを取得し、値
true
でただちに復帰して、ロック保持カウントを1に設定します。 このロックが公平順序付けポリシーを使用するように設定されていても、ほかのスレッドが書込みロックを待機している場合は、使用可能なロックは取得されません。 これは、tryLock()
メソッドとは対照的です。 公平ロックに対するバージを許可しない、時間設定されたtryLock
を使用する場合は、時間設定と非時間設定の両形式を組み合わせて使用します。if (lock.tryLock() || lock.tryLock(timeout, unit)) { ... }
現在のスレッドがロックをすでに保持している場合、保持カウントの値を1増分して、メソッドは
true
を返します。ロックが別のスレッドにより保持されている場合、現在のスレッドはスレッドのスケジューリングに関して無効になり、次の3つのいずれかが起きるまで待機します。
- 現在のスレッドにより書込みロックが取得される。
- ほかのスレッドが現在のスレッドに割り込みを行う。または
- 指定された待機時間が経過する。
書込みロックが取得された場合は値
true
が返され、書込みロック保持カウントが1に設定されます。現在のスレッドで、
- このメソッドへのエントリ上で設定された割込みステータスが保持されるか、
- 書込みロックの取得中に割り込みが発生した場合、
InterruptedException
がスローされ、現在のスレッドの割込みステータスがクリアされます。指定された待機時間が経過すると、値
false
が返されます。 時間がゼロまたはそれより小さい場合、メソッドは待機しません。このメソッドは明示的な割込みポイントであるため、この実装では、通常または再入可能なロック取得、および待機時間経過レポートへの割り込みに対する応答に高い優先度が与えられます。
- 定義:
tryLock
、インタフェース:Lock
- パラメータ:
timeout
- 書込みロックを待機する時間unit
- timeout引数の時間単位- 戻り値:
- ロックされていない状態で、現在のスレッドによりロックが取得されたか、または書込みロックがすでに現在のスレッドによって保持されていた場合は
true
。ロックを取得する前に待機時間が経過した場合はfalse
。 - 例外:
InterruptedException
- 現在のスレッドで割込みが発生した場合NullPointerException
- 時間単位がnullの場合
-
unlock
public void unlock()このロックの解放を試みます。現在のスレッドがこのロックのホルダーである場合、保持カウントの値が減らされます。 保持カウントがゼロになると、ロックが解放されます。 現在のスレッドがこのロックのホルダーではない場合、
IllegalMonitorStateException
がスローされます。- 定義:
unlock
、インタフェース:Lock
- 例外:
IllegalMonitorStateException
- 現在のスレッドがこのロックを保持していない場合
-
newCondition
public Condition newCondition()このLock
インスタンスで使用するCondition
インスタンスを返します。返される
Condition
インスタンスは、Object
監視メソッド(wait
、notify
、およびnotifyAll
)を組込み監視ロックで使用する場合と同じ使用方法をサポートします。Condition
メソッドのいずれかが呼び出されたときにこの書込みロックが保持されていない場合は、IllegalMonitorStateException
がスローされます。 (読込みロックは書込みロックとは独立して保持されるため、チェックされたり影響を受けることはありません。 ただし、現在のスレッドが読込みロックも取得している場合に状態待機メソッドを呼び出すことは、それをブロック解除可能なほかのスレッドで書込みロックが取得できなくなってしまうため、常に根本的な誤りです)。- 状態待機メソッドが呼び出されると、書込みロックが解放されます。その後、書込みロックが再取得され、ロック保持カウントがメソッドの呼出し時の状態に復元されてから、メソッドが復帰します。
- 待機中にスレッドで割り込みが発生すると、待機は終了し、
InterruptedException
がスローされ、スレッドの割込みステータスがクリアされます。 - 待機中のスレッドは、FIFOの順序で信号が送信される。
- 待機中のメソッドから復帰するスレッドがロックを再取得する順序は、スレッドがロックを最初に取得したときの順序と同じになります。これは、デフォルトでは指定されていないが、公平ロックではもっとも長く待機していたスレッドが優先されます。
- 定義:
newCondition
、インタフェース:Lock
- 戻り値:
- Conditionオブジェクト
-
toString
public String toString()このロックおよびその状態を識別する文字列を返します。 状態は括弧で囲まれ、文字列"Unlocked"
または文字列"Locked by"
に続いて、所有しているスレッドの名前が含まれます。 -
isHeldByCurrentThread
public boolean isHeldByCurrentThread()現在のスレッドがこの書込みロックを保持しているかどうかを照会します。 実質的にReentrantReadWriteLock.isWriteLockedByCurrentThread()
と同じです。- 戻り値:
- 現在のスレッドがこのロックを保持している場合は
true
。それ以外の場合はfalse
- 導入されたバージョン:
- 1.6
-
getHoldCount
public int getHoldCount()現在のスレッドの、この書込みロックに対する保持数を照会します。 スレッドには、ロック解除アクションと一致しないロック・アクションごとに、ロック保持が存在します。 実質的にReentrantReadWriteLock.getWriteHoldCount()
と同じです。- 戻り値:
- 現在のスレッドの、このロックに対する保持数。現在のスレッドがこのロックを保持していない場合はゼロ
- 導入されたバージョン:
- 1.6
-