|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.util.concurrent.locks
类 ReentrantReadWriteLock.ReadLock
java.lang.Object java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock
- 所有已实现的接口:
- Serializable, Lock
- 正在封闭类:
- ReentrantReadWriteLock
-
public static class ReentrantReadWriteLock.ReadLock
- extends Object
- implements Lock, Serializable
ReentrantReadWriteLock.readLock()
方法返回的锁定。
- 另请参见:
- 序列化表格
构造方法摘要 | |
---|---|
protected |
ReentrantReadWriteLock.ReadLock(ReentrantReadWriteLock lock) 子类使用的构造方法 |
方法摘要 | |
---|---|
void |
lock() 获取读取锁定。 |
void |
lockInterruptibly() 获取读取锁定,除非当前线程被 中断 。 |
Condition |
newCondition() 因为 ReadLocks 不支持条件,所以将抛出 UnsupportedOperationException。 |
String |
toString() 返回标识此锁定及其锁定状态的字符串。 |
boolean |
tryLock() 仅当写入锁定在调用期间未被另一个线程保持时获取读取锁定。 |
boolean |
tryLock(long timeout, TimeUnit unit) 如果另一个线程在给定的等待时间内没有保持写入锁定,并且当前线程未被 中断 ,则获取读取锁定。 |
void |
unlock() 试图释放此锁定。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
构造方法详细信息 |
---|
ReentrantReadWriteLock.ReadLock
protected ReentrantReadWriteLock.ReadLock(ReentrantReadWriteLock lock)
-
子类使用的构造方法
- 参数:
-
lock
- 外部锁定对象 - 抛出:
-
NullPointerException
- 如果 lock 为 null
方法详细信息 |
---|
lock
public void lock()
-
获取读取锁定。
如果另一个线程没有保持写入锁定,则获取读取锁定并立即返回。
如果另一个线程保持该写入锁定,出于线程调度目的,将禁用当前线程,并且在获取读取锁定之前,该线程将一直处于休眠状态。
-
lockInterruptibly
public void lockInterruptibly() throws InterruptedException
-
获取读取锁定,除非当前线程被
中断
。如果另一个线程没有保持写入锁定,则获取读取锁定并立即返回。
如果另一个线程保持了该写入锁定,出于线程调度目的,将禁用当前线程,并且在发生以下两种情况之一以前,该线程将一直处于休眠状态:
- 读取锁定由当前线程获得;或者
- 其他某个线程
中断
当前线程。
如果当前线程:
- 在进入此方法时已经设置了该线程的中断状态;或者
- 在获取读取锁定时被
中断
,
InterruptedException
,并且清除当前线程的已中断状态。在此实现中,因为此方法是一个显式中断点,所以要优先考虑响应中断,而不是响应锁定的普通获取或重入获取。
-
- 指定者:
-
接口
Lock
中的lockInterruptibly
-
- 抛出:
-
InterruptedException
- 如果当前线程是已中断的。 - 另请参见:
-
Thread.interrupt()
tryLock
public boolean tryLock()
-
仅当写入锁定在调用期间未被另一个线程保持时获取读取锁定。
如果另一个线程没有保持写入锁定,则获取读取锁定并立即返回 true 值。即使已将此锁定设置为使用公平排序策略,但是调用 tryLock() 仍将 立即获取读取锁定(如果有可用的),不管其他线程当前是否正在等待该读取锁定。在某些情况下,此“闯入”行为可能很有用,即使它会打破公平性也如此。如果希望遵守此锁定的公平设置,则使用
tryLock(0, TimeUnit.SECONDS)
,它几乎是等效的(它也检测中断)。如果写入锁定被另一个线程保持,则此方法将立即返回 false 值。
-
- 返回:
- 如果获取了读取锁定,则返回 true。
tryLock
public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException
-
如果另一个线程在给定的等待时间内没有保持写入锁定,并且当前线程未被
中断
,则获取读取锁定。如果另一个线程没有保持写入锁定,则获取读取锁定并立即返回 true 值。如果已经设置此锁定使用公平的排序策略,并且其他线程都在等待该锁定,则不会 获取一个可用的锁定。这与
tryLock()
方法相反。如果想使用一个允许闯入公平锁定的定时 tryLock,那么可以将定时形式和不定时形式组合在一起:if (lock.tryLock() || lock.tryLock(timeout, unit) ) { ... }
如果写入锁定被另一个线程保持,则出于线程调度目的,禁用当前线程,并且在发生以下三种情况之一以前,该线程将一直处于休眠状态:
- 读取锁定由当前线程获得;或者
- 其他某个线程
中断
当前线程;或者 - 已超过指定的等待时间
如果获得了读取锁定,则返回 true 值。
如果当前线程:
- 在进入此方法时已经设置了该线程的中断状态;或者
- 在获取读取锁定时被
中断
,
InterruptedException
,并且清除当前线程的已中断状态。如果超出了指定的等待时间,则返回值为 false。如果该时间小于或等于 0,则此方法根本不会等待。
在此实现中,因为此方法是一个显式中断点,所以要优先考虑响应中断,而不是响应锁定的普通获取或重入获取,或者报告所用的等待时间。
-
- 参数:
-
timeou
- 等待读取锁定的时间 -
unit
- timeout 参数的时间单位 - 返回:
- 如果获取了读取锁定,则返回 true。
- 抛出:
-
InterruptedException
- 如果当前线程被中断 -
NullPointerException
- 如果时间单位为 null - 另请参见:
-
Thread.interrupt()
unlock
public void unlock()
newCondition
public Condition newCondition()
- 因为 ReadLocks 不支持条件,所以将抛出 UnsupportedOperationException。
-
- 指定者:
-
接口
Lock
中的newCondition
-
- 返回:
-
用于此 Lock 实例的新
Condition
实例。 - 抛出:
-
UnsupportedOperationException
- 总是如此
toString
public String toString()