- java.lang.Object
-
- java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock
-
- 实现的所有接口
-
Serializable
,Lock
- Enclosing class:
- ReentrantReadWriteLock
public static class ReentrantReadWriteLock.ReadLock extends Object implements Lock, Serializable
方法ReadWriteLock.readLock()
返回的锁定。- 另请参见:
- Serialized Form
-
-
构造方法摘要
构造方法 变量 构造器 描述 protected
ReadLock(ReentrantReadWriteLock lock)
子类使用的构造方法。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 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
。 即使已将此锁定设置为使用公平排序策略,对tryLock()
的调用也会立即获取读取锁定(如果可用),无论其他线程当前是否正在等待读取锁定。 这种“闯入”行为在某些情况下可能有用,即使它违反了公平性。 如果您想要遵守此锁的公平性设置,请使用几乎相同的tryLock(0, TimeUnit.SECONDS)
(它还会检测到中断)。如果写锁定由另一个线程持有,则此方法将立即返回值
false
。
-
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
- 如果当前线程未保持此锁定
-
newCondition
public Condition newCondition()
抛出UnsupportedOperationException
因为ReadLocks
不支持条件。- Specified by:
-
newCondition
在界面Lock
- 结果
-
新
Condition
实例,该Lock
实例 - 异常
-
UnsupportedOperationException
- 永远
-
-