public static class ReentrantReadWriteLock.WriteLock extends Object implements Lock, Serializable
Modifier | Constructor and Description |
---|---|
protected |
WriteLock(ReentrantReadWriteLock lock)
子类使用的构造函数
|
Modifier and Type | Method and Description |
---|---|
int |
getHoldCount()
通过当前线程对这个写锁的数目进行查询。
|
boolean |
isHeldByCurrentThread()
查询,如果这个写锁是由当前线程举行的。
|
void |
lock()
获取写锁。
|
void |
lockInterruptibly()
获得写锁除非当前线程
interrupted。
|
Condition |
newCondition()
|
String |
toString()
返回一个确定此锁的字符串,以及它的锁状态。
|
boolean |
tryLock()
仅当调用时不在另一个线程持有时,才获取写锁。
|
boolean |
tryLock(long timeout, TimeUnit unit)
获得写锁如果不是由另一个线程在等待时间和当前线程没有被
interrupted。
|
void |
unlock()
试图释放这个锁。
|
protected WriteLock(ReentrantReadWriteLock lock)
lock
-外锁对象
NullPointerException
-如果锁是无效的
public void lock()
如果读写锁或写锁都由另一个线程持有,并立即返回,则设置写锁计数为一个。
如果当前线程已经拥有写锁然后把计数递增的方法立即返回。
如果锁由另一个线程持有,那么当前线程成为禁用线程调度的目的,并处于休眠状态,直到写锁已被收购,在这一时间写锁保持计数设置为一个。
public void lockInterruptibly() throws InterruptedException
如果读写锁或写锁都由另一个线程持有,并立即返回,则设置写锁计数为一个。
如果当前线程已经持有这个锁然后把计数递增的方法立即返回。
如果锁是由另一个线程持有的,那么当前线程成为禁用线程调度的目的,并处于休眠状态,直到两个事情发生:
如果写锁是由当前线程获取的,那么锁保持计数将被设置为一个。
如果当前线程:
InterruptedException
投入和当前线程的中断状态被清除。
在这个实现中,这种方法是一种明确的中断点,优先响应中断超过正常或折返的锁的获取。
lockInterruptibly
接口
Lock
InterruptedException
-如果当前线程被中断
public boolean tryLock()
获得写锁如果既不读也不写锁是由另一个线程并立即返回的值true
举行,设置写入锁持有数1。即使这把锁已设置为使用一个公平的订货政策,呼吁tryLock()
将立即如果它是可用的获取锁,是否有其他线程正在等待写锁。这种“闯”的行为在某些情况下可能是有用的,即使它打破了公平。如果你想尊重公平这把锁的设置,然后使用tryLock(0, TimeUnit.SECONDS)
几乎是等价的(它也检测到中断)。
如果当前线程已经持有这个锁然后把计数递增的方法返回true
。
如果锁是由另一个线程然后这个方法会立即返回的值false
。
public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException
获得写锁如果既不读也不写锁是由另一个线程并立即返回的值true
举行,设置写入锁持有数1。如果这个锁已被设置为使用一个公平的订货策略,那么一个可用的锁将不会被收购,如果任何其他线程正在等待写锁。与此形成对比的是,tryLock()
方法。如果你想要一个定时tryLock
不允许讨价还价在公平锁,然后结合定时和不定时的形式:
if (lock.tryLock() ||
lock.tryLock(timeout, unit)) {
...
}
如果当前线程已经持有这个锁然后把计数递增的方法返回true
。
如果锁由另一个线程持有,那么当前线程成为禁用线程调度的目的,并处于休眠状态,直到三个事情发生:
如果写入锁是后天再返回值true
和写锁持有数设置为一个。
如果当前线程:
InterruptedException
投入和当前线程的中断状态被清除。
如果指定的等待时间的流逝,然后false
返回值。如果时间小于或等于零,该方法将不会等待在所有。
在这个实现中,这种方法是一种明确的中断点,优先响应中断超过正常或折返的锁的获取,并在报告的等待时间的流逝。
tryLock
接口
Lock
timeout
-时间等待写锁
unit
- timeout参数的时间单位
true
如果锁是免费的,是由当前线程获取,或写锁已经被当前线程举行;和
false
如果等待的时间才可以获得的锁。
InterruptedException
-如果当前线程被中断
NullPointerException
-如果时间单位为零
public void unlock()
如果当前线程持有这个锁然后把计数减少。如果保持计数现在为零,则释放锁。如果当前线程是不是这个锁持有者然后IllegalMonitorStateException
抛出。
unlock
接口
Lock
IllegalMonitorStateException
-如果当前线程不持有这个锁
public Condition newCondition()
Condition
实例使用这
Lock
实例。
返回的Condition
实例支持Object
监测方法做同样的用法(wait
,notify
,和notifyAll
)当使用内置监控锁。
Condition
方法叫做然后IllegalMonitorStateException
抛出。(读锁是独立于写锁的,所以不检查或受影响。但是它本质上始终是一个错误,调用一个方法时,当前线程状态等也获得读锁,其他线程可以从疏通它将无法获得写锁。)InterruptedException
将抛出,和线程的中断状态将被清除。newCondition
接口
Lock
public boolean isHeldByCurrentThread()
ReentrantReadWriteLock.isWriteLockedByCurrentThread()
。
true
如果当前线程持有该锁和
false
否则
public int getHoldCount()
ReentrantReadWriteLock.getWriteHoldCount()
。
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.