public static class ReentrantReadWriteLock.ReadLock extends Object implements Lock, Serializable
ReentrantReadWriteLock.readLock()
返回。
Modifier | Constructor and Description |
---|---|
protected |
ReadLock(ReentrantReadWriteLock lock)
子类使用的构造方法
|
Modifier and Type | Method and Description |
---|---|
void |
lock()
获取读锁。
|
void |
lockInterruptibly()
获取读锁定,除非当前线程为
interrupted 。
|
Condition |
newCondition()
UnsupportedOperationException 因为
ReadLocks 不支持条件。
|
String |
toString()
返回一个标识此锁的字符串以及其锁定状态。
|
boolean |
tryLock()
只有在调用时写锁定不被其他线程占用才能获取读锁。
|
boolean |
tryLock(long timeout, TimeUnit unit)
如果写锁定在给定等待时间内未被另一个线程
占用 ,并且当前线程尚未
interrupted,则获取读锁。
|
void |
unlock()
尝试释放此锁。
|
protected ReadLock(ReentrantReadWriteLock lock)
lock
- 外锁对象
NullPointerException
- 如果锁为空
public void lock()
如果写锁定不被另一个线程占用并立即返回,则获取读取锁定。
如果写锁定由另一个线程保存,则当前线程将被禁用以进行线程调度,并处于休眠状态,直到获取读取锁定为止。
public void lockInterruptibly() throws InterruptedException
如果写锁定不被另一个线程占用并立即返回,则获取读取锁定。
如果写锁定由另一个线程保存,则当前线程将被禁用以进行线程调度,并且处于休眠状态,直到发生两件事情之一:
如果当前线程:
InterruptedException
被关上,当前线程的中断状态被清除。
在该实现中,由于该方法是明确的中断点,所以优先考虑通过锁定正常或可重入的采集来响应中断。
lockInterruptibly
在界面
Lock
InterruptedException
- 当前线程是否中断
public boolean tryLock()
如果写锁定不被另一个线程占用,则获取读锁定,并立即返回值为true
。 即使此锁已设置为使用合理的订购策略,如果可用,则呼叫tryLock()
将立即获取读锁定,无论其他线程是否正在等待读锁定。 这种“趸船”行为在某些情况下是有用的,尽管它打破了公平。 如果你希望遵守公平设置此锁,然后用tryLock(0, TimeUnit.SECONDS)
这几乎是等效的(它也检测中断)。
如果写锁定由另一个线程持有,则该方法将立即返回值为false
。
public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException
如果写锁定不被另一个线程占用,则获取读锁定,并立即返回值为true
。 如果此锁已设置为使用合理的排序策略,则如果任何其他线程正在等待锁定, 则不会获取可用的锁。 这与tryLock()
方法相反。 如果你想要一个定时的tryLock
确实允许在公平的锁上的tryLock
,那么将定时和非定时的形式结合在一起:
if (lock.tryLock() || lock.tryLock(timeout, unit)) { ... }
如果写锁定由另一个线程保存,则当前线程将被禁用以进行线程调度,并且处于休眠状态,直至发生三件事情之一:
如果读取锁定,则返回值true
。
如果当前线程:
InterruptedException
被关上,当前线程的中断状态被清除。
如果指定的等待时间过去,则返回值false
。 如果时间小于或等于零,该方法根本不会等待。
在这种实现中,由于该方法是明确的中断点,所以优先考虑响应中断超过正常或可重入的锁的获取,并且报告等待时间的过去。
tryLock
在界面
Lock
timeout
- 等待读锁的时间
unit
- 超时参数的时间单位
true
如果读取锁被获取
InterruptedException
- 当前线程是否中断
NullPointerException
- 如果时间单位为空
public Condition newCondition()
UnsupportedOperationException
因为
ReadLocks
不支持条件。
newCondition
在界面
Lock
Condition
实例为这个Lock
实例
UnsupportedOperationException
- 永远