|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.lang.Object java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock
public static class ReentrantReadWriteLock.WriteLock
ReentrantReadWriteLock.writeLock()
方法返回的锁定。
构造方法摘要 | |
---|---|
protected |
ReentrantReadWriteLock.WriteLock(ReentrantReadWriteLock lock)
子类使用的构造方法 |
方法摘要 | |
---|---|
void |
lock()
获取写入锁定。 |
void |
lockInterruptibly()
获取写入锁定,除非当前线程被 中断 。 |
Condition |
newCondition()
返回一个用来与此 Lock 实例一起使用的 Condition 实例。 |
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 |
构造方法详细信息 |
---|
protected ReentrantReadWriteLock.WriteLock(ReentrantReadWriteLock lock)
lock
- 外部锁定对象
NullPointerException
- 如果 lock 为 null方法详细信息 |
---|
public void lock()
如果另一个线程既没有保持读取锁定也没有保持写入锁定,则获取写入锁定并立即返回,并将写入锁定保持计数设置为 1。
如果当前线程已经保持写入锁定,则保持计数增加 1,该方法立即返回。
如果该锁定被另一个线程保持,出于线程调度的目的,将禁用当前线程,并且在获得写入锁定之前,该线程将一直处于休眠状态,此时写入锁定保持计数设置为 1。
Lock
中的 lock
public void lockInterruptibly() throws InterruptedException
中断
。
如果另一个线程既没有保持读取锁定也没有保持写入锁定,则获取写入锁定并立即返回,并将写入锁定保持计数设置为 1。
如果当前线程已经保持此锁定,则将保持计数加 1,该方法立即返回。
如果锁定被另一个线程保持,则出于线程调度目的,禁用当前线程,并且在发生以下两种情况之一以前,该线程将一直处于休眠状态:
中断
当前线程。
如果当前线程获得写入锁定,则将锁定保持计数设置为 1。
如果当前线程:
中断
。
InterruptedException
,并且清除当前线程的已中断状态。
在此实现中,因为此方法是一个显式中断点,所以要优先考虑响应中断,而不是响应锁定的普通获取或重入获取。
Lock
中的 lockInterruptibly
InterruptedException
- 如果当前线程是已中断的。Thread.interrupt()
public boolean tryLock()
如果另一个线程既没有保持读取锁定也没有保持写入锁定,则获取写入锁定并立即返回 true 值,并将写入锁定保持计数设置为 1。即使已将此锁定设置为使用公平排序策略,但是调用 tryLock() 仍将 立即获取锁定(如果有可用的),不管其他线程当前是否正在等待写入锁定。在某些情况下,此“闯入”行为可能很有用,即使它会打破公平性也如此。如果希望遵守此锁定的公平设置,则使用 tryLock(0, TimeUnit.SECONDS)
,它几乎是等效的(它也检测中断)。
如果当前线程已经保持此锁定,则将保持计数加 1,该方法将返回 true。
如果锁定被另一个线程保持,则此方法将立即返回 false 值。
Lock
中的 tryLock
public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException
中断
,则获取写入锁定。
如果另一个线程既没有保持读取锁定也没有保持写入锁定,则获取写入锁定并立即返回 true 值,并将写入锁定保持计数设置为 1。如果为了使用公平的排序策略,已经设置此锁定,并且其他线程都在等待写入锁定,则不会 获取一个可用的锁定。这与 tryLock()
方法相反。如果想使用一个允许闯入公平锁定的定时 tryLock,那么可以将定时形式和不定时形式组合在一起:
if (lock.tryLock() || lock.tryLock(timeout, unit) ) { ... }
如果当前线程已经保持此锁定,则将保持计数加 1,该方法将返回 true。
如果锁定被另一个线程保持,则出于线程调度目的,禁用当前线程,并且在发生以下三种情况之一以前,该线程将一直处于休眠状态:
中断
当前线程;或者
如果获取了写入锁定,则返回 true 值,并将写入锁定保持计数设置为 1。
如果当前线程:
中断
。
InterruptedException
,并且清除当前线程的已中断状态。
如果超出了指定的等待时间,则返回值为 false。如果该时间小于或等于 0,则此方法根本不会等待。
在此实现中,因为此方法是一个显式中断点,所以要优先考虑响应中断,而不是响应锁定的普通获取或重入获取,或者报告所用的等待时间。
Lock
中的 tryLock
timeou
- 等待写入锁定的时间unit
- timeout 参数的时间单位
InterruptedException
- 如果当前线程被中断
NullPointerException
- 如果时间单位为 nullThread.interrupt()
public void unlock()
如果当前线程保持此锁定,则将保持计数减 1。如果保持计数现在为 0,则释放该锁定。如果当前线程不是此锁定的持有者,则抛出 IllegalMonitorStateException
。
Lock
中的 unlock
IllegalMonitorStateException
- 如果当前线程没有保持此锁定。public Condition newCondition()
Lock
实例一起使用的 Condition
实例。
在使用内置监视器锁定时,返回的 Condition
实例支持与 Object
的监视器方法(wait
、notify
和 notifyAll
)相同的用法。
Condition
方法时没有保持此写入锁定,则抛出 IllegalMonitorStateException
。(因为保持读取锁定是独立于写入锁定的,所以读取锁定将不被检查或受影响。但是,在当前线程已经获取读取锁定时,调用一个条件等待方法实质上一直是错误的做法,因为能够解除阻塞该方法的其他线程将无法获取写入锁定。)
waiting
条件方法并释放写入锁定时,在它们返回之前,会重新获取写入锁定,并将锁定保持计数恢复到调用该方法时的值。
InterruptedException
,清除线程的已中断状态。
Lock
中的 newCondition
public String toString()
Thread.getName()
。
Object
中的 toString
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。