模块 java.base

类 ReentrantReadWriteLock.ReadLock

java.lang.Object
java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock
所有已实现的接口:
Serializable , Lock
封闭类:
ReentrantReadWriteLock

public static class ReentrantReadWriteLock.ReadLock extends Object implements Lock , Serializable
方法 ReentrantReadWriteLock.readLock() 返回的锁。
参见:
  • 构造方法详细信息

  • 方法详情

    • lock

      public void lock()
      获取读锁。

      如果写锁未被其他线程持有,则获取读锁并立即返回。

      如果写锁被另一个线程持有,则当前线程将因线程调度目的而被禁用,并处于休眠状态,直到获得读锁。

      指定者:
      lock 在接口 Lock
    • lockInterruptibly

      public void lockInterruptibly() throws InterruptedException
      获取读锁,除非当前线程是 interrupted

      如果写锁未被其他线程持有,则获取读锁并立即返回。

      如果写锁被另一个线程持有,则当前线程将出于线程调度目的而被禁用并处于休眠状态,直到发生以下两种情况之一:

      • 读锁由当前线程获取;或者
      • 一些其他线程 中断 当前线程。

      如果当前线程:

      • 在进入此方法时设置其中断状态;或者
      • 获取读锁时是interrupted
      然后抛出InterruptedException 并清除当前线程的中断状态。

      在此实现中,由于此方法是显式中断点,因此优先响应中断而不是正常或可重入获取锁。

      指定者:
      lockInterruptibly 在接口 Lock
      抛出:
      InterruptedException - 如果当前线程被中断
    • tryLock

      public boolean tryLock()
      仅当调用时写锁未被另一个线程持有时才获取读锁。

      如果写锁未被另一个线程持有,则获取读锁并立即返回值 true 。即使已将此锁设置为使用公平排序策略,对 tryLock() will 的调用也会在可用时立即获取读锁,无论其他线程当前是否正在等待读锁。这种“闯入”行为在某些情况下可能很有用,即使它破坏了公平性。如果你想遵守这个锁的公平设置,那么使用几乎等效的tryLock(0, TimeUnit.SECONDS) (它也检测中断)。

      如果写锁被另一个线程持有,则此方法将立即返回值 false

      指定者:
      tryLock 在接口 Lock
      返回:
      true 如果获得读锁
    • tryLock

      public boolean tryLock(long timeout, TimeUnit  unit) throws InterruptedException
      如果写锁在给定的等待时间内没有被另一个线程持有并且当前线程还没有interrupted,则获取读锁。

      如果写锁未被另一个线程持有,则获取读锁并立即返回值 true 。如果此锁已设置为使用公平排序策略,则在任何其他线程正在等待锁的情况下,将获取可用锁will not。这与 tryLock() 方法形成对比。如果你想要一个允许闯入公平锁的定时tryLock,那么将定时和非定时形式组合在一起:

       
       if (lock.tryLock() ||
         lock.tryLock(timeout, unit)) {
        ...
       } 

      如果写锁被另一个线程持有,则当前线程将因线程调度目的而被禁用并处于休眠状态,直到发生以下三种情况之一:

      • 读锁由当前线程获取;或者
      • 一些其他线程中断当前线程;或者
      • 指定的等待时间已过。

      如果获得读锁,则返回值 true

      如果当前线程:

      • 在进入此方法时设置其中断状态;或者
      • 获取读锁时是interrupted
      然后抛出InterruptedException 并清除当前线程的中断状态。

      如果指定的等待时间过去,则返回值 false。如果时间小于或等于零,则该方法根本不会等待。

      在此实现中,由于此方法是一个显式中断点,因此优先响应中断而不是正常或重入获取锁,并优先报告等待时间的流逝。

      指定者:
      tryLock 在接口 Lock
      参数:
      timeout - 等待读锁的时间
      unit - 超时参数的时间单位
      返回:
      true 如果获得读锁
      抛出:
      InterruptedException - 如果当前线程被中断
      NullPointerException - 如果时间单位为空
    • unlock

      public void unlock()
      尝试释放此锁。

      如果读者数量现在为零,则锁定可用于写锁定尝试。如果当前线程不持有此锁,则抛出 IllegalMonitorStateException

      指定者:
      unlock 在接口 Lock
      抛出:
      IllegalMonitorStateException - 如果当前线程没有持有这个锁
    • newCondition

      public Condition  newCondition()
      抛出 UnsupportedOperationException 因为 ReadLocks 不支持条件。
      指定者:
      newCondition 在接口 Lock
      返回:
      Lock 实例的新 Condition 实例
      抛出:
      UnsupportedOperationException - 总是
    • toString

      public String  toString()
      返回标识此锁及其锁定状态的字符串。括号中的状态包括字符串 "Read locks =",后跟持有的读取锁的数量。
      重写:
      toString 在类 Object
      返回:
      标识此锁及其锁定状态的字符串