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