- java.lang.Object
-
- java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock
-
- All Implemented Interfaces:
-
Serializable
,Lock
- Enclosing class:
- ReentrantReadWriteLock
public static class ReentrantReadWriteLock.ReadLock extends Object implements Lock, Serializable
- 另请参见:
- Serialized Form
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
ReadLock(ReentrantReadWriteLock lock)
子类使用的构造方法。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 void
lock()
获取读锁。void
lockInterruptibly()
获取读锁定,除非当前线程是 interrupted 。Condition
newCondition()
抛出UnsupportedOperationException
因为ReadLocks
不支持条件。String
toString()
返回一个标识此锁的字符串以及其锁定状态。boolean
tryLock()
只有在调用时写锁定不被其他线程占用才能获取读锁。boolean
tryLock(long timeout, TimeUnit unit)
如果写锁定在给定等待时间内未被另一个线程 占用 ,并且当前线程尚未被 interrupted获取读取锁定。void
unlock()
尝试释放此锁。
-
-
-
构造方法详细信息
-
ReadLock
protected ReadLock(ReentrantReadWriteLock lock)
子类使用的构造方法。- 参数
-
lock
- 外锁对象 - 异常
-
NullPointerException
- 如果锁为空
-
-
方法详细信息
-
lock
public void 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
。
-
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
- 如果时间单位为空
-
unlock
public void unlock()
尝试释放此锁。如果读取器的数量现在为零,则锁定可用于写入锁定尝试。 如果当前线程不保持此锁,则抛出
IllegalMonitorStateException
。- Specified by:
-
unlock
在接口Lock
- 异常
-
IllegalMonitorStateException
- 如果当前线程不持有此锁
-
newCondition
public Condition newCondition()
抛出UnsupportedOperationException
因为ReadLocks
不支持条件。- Specified by:
-
newCondition
在接口Lock
- 结果
-
一个新的
Condition
实例为这个Lock
实例 - 异常
-
UnsupportedOperationException
- 永远
-
-