Module  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则获取读锁定,并立即返回值为true 即使此锁已设置为使用合理的订购策略,如果可用的话,无论其他线程是否正在等待读锁定,对tryLock()的调用立即获取读锁。 这种“趸船”行为在某些情况下是有用的,尽管它打破了公平。 如果要尊重此锁的公平性设置,则使用tryLock(0, TimeUnit.SECONDS) 几乎相当(也检测到中断)。

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

        Specified by:
        tryLock在接口 Lock
        结果
        true如果读取锁被获取
      • tryLock

        public boolean tryLock​(long timeout,
                               TimeUnit unit)
                        throws InterruptedException
        如果写锁定在给定等待时间内未被另一个线程占用并且当前线程尚未被interrupted采集读取锁定

        如果写锁定不被另一个线程true则获取读锁定,并立即返回值为true 如果此锁已设置为使用合理的排序策略,则如果任何其他线程正在等待锁定, 则不会获取可用的锁。 这与tryLock()方法相反。 如果你想要一个定时的tryLock ,允许在公平的锁定驳船,那么将定时和不定时的形式结合在一起:

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

        如果写锁定由另一个线程保存,则当前线程将被禁用以进行线程调度,并处于休眠状态,直至发生三件事情之一:

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

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

        如果当前线程:

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

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

        在这种实现中,由于该方法是明确的中断点,所以优先考虑响应中断超过正常或可重入的锁的获取,并且报告等待时间的过去。

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

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