public static class ReentrantReadWriteLock.WriteLock extends Object implements Lock, Serializable
ReentrantReadWriteLock.writeLock()
メソッドによって返されたロックです。修飾子 | コンストラクタと説明 |
---|---|
protected |
WriteLock(ReentrantReadWriteLock lock)
サブクラスにより使用されるコンストラクタです。
|
修飾子と型 | メソッドと説明 |
---|---|
int |
getHoldCount()
現在のスレッドの、この書込みロックに対する保持数を照会します。
|
boolean |
isHeldByCurrentThread()
現在のスレッドがこの書込みロックを保持しているかどうかを照会します。
|
void |
lock()
書込みロックを取得します。
|
void |
lockInterruptibly()
現在のスレッドに割り込みが発生しないかぎり、書込みロックを取得します。
|
Condition |
newCondition()
|
String |
toString()
このロックおよびその状態を識別する文字列を返します。
|
boolean |
tryLock()
呼出し時に別のスレッドにより保持されていない場合のみに、書込みロックを取得します。
|
boolean |
tryLock(long timeout, TimeUnit unit)
指定された待機時間内に別のスレッドがロックを保持せず、現在のスレッドで割り込みが発生していない場合に、書込みロックを取得します。
|
void |
unlock()
このロックの解放を試みます。
|
protected WriteLock(ReentrantReadWriteLock lock)
lock
- 外部のロック・オブジェクトNullPointerException
- lockがnullの場合public void lock()
読込みロックまたは書込みロックのいずれも別のスレッドに保持されていない場合、書込みロックを取得してただちに復帰し、書込みロックの保持カウントを1に設定します。
現在のスレッドが書込みロックをすでに保持している場合、保持カウントの値を1増分して、メソッドをただちに復帰します。
ロックが別のスレッドにより保持されている場合、現在のスレッドがスレッド・スケジューリングに関して無効になり、書込みロックが取得されるまで待機します。ロックが取得されると、書込みロック保持カウントが1に設定されます。
public void lockInterruptibly() throws InterruptedException
読込みロックまたは書込みロックのいずれも別のスレッドに保持されていない場合、書込みロックを取得してただちに復帰し、書込みロックの保持カウントを1に設定します。
現在のスレッドがロックをすでに保持している場合、保持カウントの値を1増分して、メソッドをただちに復帰します。
ロックが別のスレッドにより保持されている場合、現在のスレッドはスレッドのスケジューリングに関して無効になり、次の2つのいずれかが起きるまで待機します。
書込みロックが現在のスレッドにより取得された場合、ロック保持カウントが1に設定されます。
現在のスレッドで、
InterruptedException
がスローされ、現在のスレッドの割込みステータスがクリアされます。
このメソッドは明示的な割込みポイントであるため、この実装では、通常または再入可能なロック取得への割り込みへの応答に高い優先度が与えられます。
lockInterruptibly
、インタフェース: Lock
InterruptedException
- 現在のスレッドで割込みが発生した場合public boolean tryLock()
別のスレッドが書込みロックと読込みロックのいずれも保持していない場合に書込みロックを取得し、値true
でただちに復帰して、ロック保持カウントを1に設定します。このロックが公平順序付けポリシーを使用するように設定されている場合でも、ロックが使用可能であれば、ほかのスレッドが現在書込みロックを待機しているかどうかには関係なく、tryLock()
の呼出しによってそのロックがただちに取得されます。この「バージ」(barging)動作により公平性が失われるとは言え、これは特定の状況下で有用です。このロックの公平性設定を尊重する場合は、ほぼ等価なtryLock(0, TimeUnit.SECONDS)
を使用します(これも割込みを検出する)。
現在のスレッドがロックをすでに保持している場合、保持カウントの値を1増分して、メソッドはtrue
を返します。
ロックが別のスレッドにより保持されている場合、このメソッドは、値false
でただちに復帰します。
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の場合public void unlock()
現在のスレッドがこのロックのホルダーである場合、保持カウントの値が減らされます。保持カウントがゼロになると、ロックが解放されます。現在のスレッドがこのロックのホルダーではない場合、IllegalMonitorStateException
がスローされます。
unlock
、インタフェース: Lock
IllegalMonitorStateException
- 現在のスレッドがこのロックを保持していない場合public Condition newCondition()
Lock
インスタンスで使用するCondition
インスタンスを返します。
返されるCondition
インスタンスは、Object
監視メソッド(wait
、notify
、およびnotifyAll
)を組込み監視ロックで使用する場合と同じ使用方法をサポートします。
Condition
メソッドのいずれかが呼び出されたときにこの書込みロックが保持されていない場合は、IllegalMonitorStateException
がスローされます。(読込みロックは書込みロックとは独立して保持されるため、チェックされたり影響を受けることはありません。ただし、現在のスレッドが読込みロックも取得している場合に状態待機メソッドを呼び出すことは、それをブロック解除可能なほかのスレッドで書込みロックが取得できなくなってしまうため、常に根本的な誤りです)。
InterruptedException
がスローされ、スレッドの割込みステータスがクリアされます。
newCondition
、インタフェース: Lock
public boolean isHeldByCurrentThread()
ReentrantReadWriteLock.isWriteLockedByCurrentThread()
と同じです。true
。それ以外の場合はfalse
public int getHoldCount()
ReentrantReadWriteLock.getWriteHoldCount()
と同じです。 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.