java.lang.Object
java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock
- 所有已实现的接口:
-
Serializable
,Lock
- 参见:
-
Constructor Details
-
ReadLock
供子类使用的构造函数。- 参数:
-
lock
- 外部锁对象 - 抛出:
-
NullPointerException
- 如果锁为null
-
-
Method Details
-
lock
public void lock()获取读锁。如果写锁未被其他线程持有,则立即获取读锁。
如果写锁被其他线程持有,则当前线程将因线程调度目的而被禁用,并处于休眠状态,直到获取读锁为止。
-
lockInterruptibly
获取读锁,除非当前线程被中断。如果写锁未被其他线程持有,则立即获取读锁。
如果写锁被其他线程持有,则当前线程将因线程调度目的而被禁用,并处于休眠状态,直到以下两种情况发生之一:
- 当前线程获取读锁;或
- 其他线程中断当前线程。
如果当前线程:
- 在进入此方法时设置了中断状态;或
- 在获取读锁时被中断,
InterruptedException
,并清除当前线程的中断状态。在此实现中,由于此方法是显式中断点,优先响应中断而不是正常或可重入地获取锁。
- 指定者:
-
lockInterruptibly
在接口Lock
中 - 抛出:
-
InterruptedException
- 如果当前线程被中断
-
tryLock
public boolean tryLock()仅在调用时写锁未被其他线程持有时获取读锁。如果写锁未被其他线程持有,则立即获取读锁并返回值
true
。即使此锁已设置为使用公平排序策略,调用tryLock()
将立即获取读锁(如果可用),无论其他线程当前是否正在等待读锁。这种“插队”行为在某些情况下可能很有用,尽管它破坏了公平性。如果要遵守此锁的公平设置,则使用tryLock(0, TimeUnit.SECONDS)
,几乎等效(它还检测中断)。如果写锁被其他线程持有,则此方法将立即返回值
false
。 -
tryLock
在给定等待时间内,如果写锁未被其他线程持有且当前线程未被中断,则获取读锁。如果写锁未被其他线程持有,则立即获取读锁并返回值
true
。如果此锁已设置为使用公平排序策略,则不会获取可用锁,如果其他线程正在等待锁。这与tryLock()
方法相反。如果要在公平锁上允许插队的定时tryLock
,则将定时和非定时形式结合使用:if (lock.tryLock() || lock.tryLock(timeout, unit)) { ... }
如果写锁被其他线程持有,则当前线程将因线程调度目的而被禁用,并处于休眠状态,直到以下三种情况之一发生:
- 当前线程获取读锁;或
- 其他线程中断当前线程;或
- 指定的等待时间过去。
如果获取了读锁,则返回值
true
。如果当前线程:
- 在进入此方法时设置了中断状态;或
- 在获取读锁时被中断,
InterruptedException
,并清除当前线程的中断状态。如果指定的等待时间过去,则返回值
false
。如果时间小于或等于零,则该方法将根本不等待。在此实现中,由于此方法是显式中断点,优先响应中断而不是正常或可重入地获取锁,并优先报告等待时间的过去。
- 指定者:
-
tryLock
在接口Lock
中 - 参数:
-
timeout
- 等待读锁的时间 -
unit
- 超时参数的时间单位 - 返回:
-
true
如果获取了读锁 - 抛出:
-
InterruptedException
- 如果当前线程被中断 -
NullPointerException
- 如果时间单位为null
-
unlock
public void unlock()尝试释放此锁。如果读者数量现在为零,则该锁将可用于写锁尝试。如果当前线程未持有此锁,则抛出
IllegalMonitorStateException
。- 指定者:
-
unlock
在接口Lock
中 - 抛出:
-
IllegalMonitorStateException
- 如果当前线程未持有此锁
-
newCondition
抛出UnsupportedOperationException
,因为ReadLocks
不支持条件。- 指定者:
-
newCondition
在接口Lock
中 - 返回:
-
为此
Lock
实例创建一个新的Condition
实例 - 抛出:
-
UnsupportedOperationException
- 总是
-
toString
返回标识此锁及其锁状态的字符串。状态在括号中包括字符串"Read locks ="
后跟持有的读锁数量。
-