模块  java.base

Class ReentrantReadWriteLock.ReadLock

    • 方法详细信息

      • lock

        public void lock()
        获取读锁定。

        如果写锁定未被另一个线程保持并立即返回,则获取读锁定。

        如果写锁定由另一个线程保持,则当前线程将被禁用以进行线程调度,并且在获取读取锁定之前处于休眠状态。

        Specified by:
        lock在界面 Lock
      • lockInterruptibly

        public void lockInterruptibly()
                               throws InterruptedException
        除非当前线程为interrupted,否则获取读锁定。

        如果写锁定未被另一个线程保持并立即返回,则获取读锁定。

        如果写锁定由另一个线程保持,那么当前线程将被禁用以进行线程调度,并且在发生以下两种情况之一之前处于休眠状态:

        • 读锁定由当前线程获取; 要么
        • 一些其他线程interrupts当前线程。

        如果当前线程:

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

        在该实现中,由于该方法是显式中断点,因此优先考虑通过正常或可重入获取锁来响应中断。

        Specified by:
        lockInterruptibly在界面 Lock
        异常
        InterruptedException - 如果当前线程被中断
      • tryLock

        public boolean tryLock()
        仅在调用时另一个线程未保持写锁定时才获取读锁定。

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

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

        Specified by:
        tryLock在界面 Lock
        结果
        true如果获取了读锁定
      • tryLock

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

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

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

        如果写锁定由另一个线程保持,那么当前线程将被禁用以进行线程调度,并且在发生以下三种情况之一之前处于休眠状态:

        • 读锁定由当前线程获取; 要么
        • 其他一些线程interrupts当前线程; 要么
        • 指定的等待时间过去了。

        如果获取了读锁定,则返回值true

        如果当前线程:

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

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

        在该实现中,由于该方法是显式中断点,因此优先考虑响应正常或重入获取锁的中断,并且过度报告等待时间的流逝。

        Specified by:
        tryLock在界面 Lock
        参数
        timeout - 等待读锁定的时间
        unit - 超时参数的时间单位
        结果
        true如果获取了读锁定
        异常
        InterruptedException - 如果当前线程被中断
        NullPointerException - 如果时间单位为空
      • unlock

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

        如果读取器的数量现在为零,则锁定可用于写入锁定尝试。 如果当前线程没有保持此锁定,则抛出IllegalMonitorStateException

        Specified by:
        unlock ,界面 Lock
        异常
        IllegalMonitorStateException - 如果当前线程未保持此锁定
      • toString

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