モジュール java.base

クラス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
    サブクラスにより使用されるコンストラクタです。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    int
    現在のスレッドの、この書込みロックに対する保持数を照会します。
    boolean
    現在のスレッドがこの書込みロックを保持しているかどうかを照会します。
    void
    書込みロックを取得します。
    void
    現在のスレッドに割り込みが発生しないかぎり、書込みロックを取得します。
    このLockインスタンスで使用するConditionインスタンスを返します。
    このロックおよびその状態を識別する文字列を返します。
    boolean
    呼出し時に別のスレッドにより保持されていない場合のみに、書込みロックを取得します。
    boolean
    tryLock(long timeout, TimeUnit unit)
    指定された待機時間内に別のスレッドがロックを保持せず、現在のスレッドで割り込みが発生していない場合に、書込みロックを取得します。
    void
    このロックの解放を試みます。

    クラス java.lang.Objectで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • コンストラクタの詳細

    • WriteLock

      protected WriteLock(ReentrantReadWriteLock lock)
      サブクラスにより使用されるコンストラクタです。
      パラメータ:
      lock - 外部のロック・オブジェクト
      例外:
      NullPointerException - lockがnullの場合
  • メソッドの詳細

    • lock

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

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

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

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

      定義:
      lock、インタフェース: Lock
    • 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、インタフェース: Lock
      戻り値:
      ロックされていない状態で、現在のスレッドによりロックが取得されたか、または書込みロックがすでに現在のスレッドによって保持されていた場合は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監視メソッド(waitnotify、およびnotifyAll)を組込み監視ロックで使用する場合と同じ使用方法をサポートします。

      • Conditionメソッドのいずれかが呼び出されたときにこの書込みロックが保持されていない場合は、IllegalMonitorStateExceptionがスローされます。 (読込みロックは書込みロックとは独立して保持されるため、チェックされたり影響を受けることはありません。 ただし、現在のスレッドが読込みロックも取得している場合に状態待機メソッドを呼び出すことは、それをブロック解除可能なほかのスレッドで書込みロックが取得できなくなってしまうため、常に根本的な誤りです)。
      • 状態待機メソッドが呼び出されると、書込みロックが解放されます。その後、書込みロックが再取得され、ロック保持カウントがメソッドの呼出し時の状態に復元されてから、メソッドが復帰します。
      • 待機中にスレッドで割り込みが発生すると、待機は終了し、InterruptedExceptionがスローされ、スレッドの割込みステータスがクリアされます。
      • 待機中のスレッドは、FIFOの順序で信号が送信される。
      • 待機中のメソッドから復帰するスレッドがロックを再取得する順序は、スレッドがロックを最初に取得したときの順序と同じになります。これは、デフォルトでは指定されていないが、公平ロックではもっとも長く待機していたスレッドが優先されます。

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

      public String toString()
      このロックおよびその状態を識別する文字列を返します。 状態は括弧で囲まれ、文字列"Unlocked"または文字列"Locked by"に続いて、所有しているスレッドの名前が含まれます。
      オーバーライド:
      toString 、クラス:  Object
      戻り値:
      このロックおよびその状態を識別する文字列
    • isHeldByCurrentThread

      public boolean isHeldByCurrentThread()
      現在のスレッドがこの書込みロックを保持しているかどうかを照会します。 実質的にReentrantReadWriteLock.isWriteLockedByCurrentThread()と同じです。
      戻り値:
      現在のスレッドがこのロックを保持している場合はtrue。それ以外の場合はfalse
      導入されたバージョン:
      1.6
    • getHoldCount

      public int getHoldCount()
      現在のスレッドの、この書込みロックに対する保持数を照会します。 スレッドには、ロック解除アクションと一致しないロック・アクションごとに、ロック保持が存在します。 実質的にReentrantReadWriteLock.getWriteHoldCount()と同じです。
      戻り値:
      現在のスレッドの、このロックに対する保持数。現在のスレッドがこのロックを保持していない場合はゼロ
      導入されたバージョン:
      1.6