JavaTM 2 Platform
Standard Ed. 5.0

java.util.concurrent.locks
クラス ReentrantReadWriteLock.WriteLock

java.lang.Object
  上位を拡張 java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock
すべての実装されたインタフェース:
Serializable, Lock
含まれているクラス:
ReentrantReadWriteLock

public static class ReentrantReadWriteLock.WriteLock
extends Object
implements Lock, Serializable

ReentrantReadWriteLock.writeLock() メソッドにより返されるロック

関連項目:
直列化された形式

コンストラクタの概要
protected ReentrantReadWriteLock.WriteLock(ReentrantReadWriteLock lock)
          サブクラスにより使用されるコンストラクタです。
 
メソッドの概要
 void lock()
          書き込みロックを取得します。
 void lockInterruptibly()
          現在のスレッドが interrupted でないかぎり、書き込みロックを取得します。
 Condition newCondition()
          この Lock インスタンスで使用する Condition インスタンスを返します。
 String toString()
          このロックを識別する文字列およびロック状態を返します。
 boolean tryLock()
          呼び出し時に別のスレッドにより保持されていない場合のみに、書き込みロックを取得します。
 boolean tryLock(long timeout, TimeUnit unit)
          指定された待機時間内に別のスレッドがロックを保持せず、現在のスレッドで割り込みが発生していない場合に、書き込みロックを取得します。
 void unlock()
          このロックの解放を試みます。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

コンストラクタの詳細

ReentrantReadWriteLock.WriteLock

protected ReentrantReadWriteLock.WriteLock(ReentrantReadWriteLock lock)
サブクラスにより使用されるコンストラクタです。

パラメータ:
lock - 外部のロックオブジェクト
例外:
NullPointerException - ロックが null の場合
メソッドの詳細

lock

public void lock()
書き込みロックを取得します。

読み込みロックまたは書き込みロックのいずれも別のスレッドに保持されていない場合、書き込みロックを取得してただちに復帰し、書き込みロックの保持カウントを 1 に設定します。

現在のスレッドが書き込みロックをすでに保持している場合、保持カウントの値を 1 増分して、メソッドをただちに復帰します。

ロックが別のスレッドにより保持されている場合、現在のスレッドがスレッドスケジューリングに関して無効になり、書き込みロックが取得されるまで待機します。ロックが取得されると、書き込みロック保持カウントが 1 に設定されます。

定義:
インタフェース Lock 内の lock

lockInterruptibly

public void lockInterruptibly()
                       throws InterruptedException
現在のスレッドが interrupted でないかぎり、書き込みロックを取得します。

読み込みロックまたは書き込みロックのいずれも別のスレッドに保持されていない場合、書き込みロックを取得してただちに復帰し、書き込みロックの保持カウントを 1 に設定します。

現在のスレッドがロックをすでに保持している場合、保持カウントの値を 1 増分して、メソッドをただちに復帰します。

ロックが別のスレッドにより保持されている場合、現在のスレッドはスレッドのスケジューリングに関して無効になり、次の 2 つのいずれかが起きるまで待機します。

書き込みロックが現在のスレッドにより取得された場合、ロック保持カウントが 1 に設定されます。

現在のスレッドで、

InterruptedException がスローされ、現在のスレッドの割り込みステータスがクリアされます。

このメソッドは明示的な割り込みポイントであるため、この実装では、通常または再入可能なロック取得への割り込みへの応答に高い優先度が与えられます。

定義:
インタフェース Lock 内の lockInterruptibly
例外:
InterruptedException - 現在のスレッドで割り込みが発生した場合
関連項目:
Thread.interrupt()

tryLock

public boolean tryLock()
呼び出し時に別のスレッドにより保持されていない場合のみに、書き込みロックを取得します。

別のスレッドにより書き込みロックと読み込みロックのいずれも保持されていない場合に書き込みロックを取得し、値 true でただちに復帰してロックの保持カウントを 1 に設定します。このロックが均等順序付けポリシーを使用するように設定されている場合でも、ロックが使用可能であれば、他のスレッドが現在書き込みロックを待機しているかどうかに関係なく、tryLock() の呼び出しですぐにロックが取得されます。この「バージ」動作により均等性が失われるとは言え、これは特定の状況下で有用です。このロックの均等設定を尊重する場合は、ほぼ等価な tryLock(0, TimeUnit.SECONDS) を使用します (これも割り込みを検出する)。

現在のスレッドがロックをすでに保持している場合、保持カウントの値が 1 増分され、メソッドは true を返します。

ロックが別のスレッドにより保持されている場合、このメソッドは、値 false でただちに復帰します。

定義:
インタフェース Lock 内の tryLock
戻り値:
ロックがフリーで現在のスレッドにより取得されたか、書き込みロックが現在のスレッドにより取得済みである場合は 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 が返されます。時間がゼロまたはそれより小さい場合、メソッドは待機しません。

このメソッドは明示的な割り込みポイントであるため、この実装では、通常または再入可能なロック取得、および待機時間経過レポートへの割り込みに対する応答に高い優先度が与えられます。

定義:
インタフェース Lock 内の tryLock
パラメータ:
timeout - 書き込みロックを待機する時間
unit - timeout 引数の時間単位
戻り値:
ロックがフリーで現在のスレッドにより所得されたか、書き込みロックが現在のスレッドにより取得済みである場合は true、ロックを取得する前に待機時間が経過した場合は false
例外:
InterruptedException - 現在のスレッドで割り込みが発生した場合
NullPointerException - 単位が null の場合
関連項目:
Thread.interrupt()

unlock

public void unlock()
このロックの解放を試みます。

現在のスレッドがこのロックのホルダである場合、保持カウントの値が減らされます。保持カウントがゼロになると、ロックが解放されます。現在のスレッドがこのロックのホルダではない場合、IllegalMonitorStateException がスローされます。

定義:
インタフェース Lock 内の unlock
例外:
IllegalMonitorStateException - 現在のスレッドがこのロックを保持しない場合

newCondition

public Condition newCondition()
この Lock インスタンスで使用する Condition インスタンスを返します。

返される Condition インスタンスは、Object 監視メソッド (waitnotify、および notifyAll) を組み込み監視ロックで使用する場合と同じ使用方法をサポートします。

定義:
インタフェース Lock 内の newCondition
戻り値:
Condition オブジェクト

toString

public String toString()
このロックを識別する文字列およびロック状態を返します。状態は括弧で囲まれ、文字列「Unlocked」または文字列「Locked by」に続いて、所有するスレッドの Thread.getName() が含まれます。

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

JavaTM 2 Platform
Standard Ed. 5.0

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

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