- 所有已实现的接口:
Serializable,Lock
ReentrantReadWriteLock.writeLock() 返回的锁。
- 参见:
-
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述int查询当前线程持有这个写锁的次数。boolean查询此写锁是否由当前线程持有。voidlock()获取写锁。void获取写锁,除非当前线程是 interrupted 。toString()返回标识此锁及其锁定状态的字符串。booleantryLock()仅当调用时未被另一个线程持有时才获取写锁。boolean如果在给定的等待时间内没有被另一个线程持有并且当前线程还没有interrupted,则获取写锁。voidunlock()尝试释放此锁。
-
构造方法详细信息
-
WriteLock
供子类使用的构造方法。- 参数:
lock- 外锁对象- 抛出:
NullPointerException- 如果锁为空
-
-
方法详情
-
lock
public void lock()获取写锁。如果读锁和写锁都没有被另一个线程持有,则获取写锁并立即返回,将写锁持有计数设置为 1。
如果当前线程已经持有写锁,则持有计数加一,方法立即返回。
如果锁由另一个线程持有,则当前线程出于线程调度目的而被禁用并处于休眠状态,直到获得写锁,此时写锁持有计数被设置为 1。
-
lockInterruptibly
获取写锁,除非当前线程是 interrupted 。如果读锁和写锁都没有被另一个线程持有,则获取写锁并立即返回,将写锁持有计数设置为 1。
如果当前线程已经持有此锁,则持有计数将递增 1,并且该方法会立即返回。
如果锁由另一个线程持有,则当前线程将出于线程调度目的而被禁用并处于休眠状态,直到发生以下两种情况之一:
- 写锁由当前线程获取;或者
- 一些其他线程 中断 当前线程。
如果写锁被当前线程获取,则锁保持计数设置为 1。
如果当前线程:
- 在进入此方法时设置其中断状态;或者
- 获取写锁时是interrupted,
InterruptedException并清除当前线程的中断状态。在此实现中,由于此方法是显式中断点,因此优先响应中断而不是正常或可重入获取锁。
- 指定者:
lockInterruptibly在接口Lock中- 抛出:
InterruptedException- 如果当前线程被中断
-
tryLock
public boolean tryLock()仅当调用时未被另一个线程持有时才获取写锁。如果读锁和写锁均未被另一个线程持有,则获取写锁并立即返回值
true,将写锁持有计数设置为 1。即使此锁已设置为使用公平排序策略,调用tryLock()will 也会立即获取锁(如果可用),无论其他线程当前是否正在等待写锁。这种“闯入”行为在某些情况下可能很有用,即使它破坏了公平性。如果您想遵守此锁的公平性设置,请使用几乎等效的tryLock(0, TimeUnit.SECONDS)(它还会检测中断)。如果当前线程已经持有此锁,则持有计数递增 1,并且该方法返回
true。如果锁被另一个线程持有,则此方法将立即返回值
false。 -
tryLock
如果在给定的等待时间内没有被另一个线程持有并且当前线程还没有interrupted,则获取写锁。如果读锁和写锁均未被另一个线程持有,则获取写锁并立即返回值
true,将写锁持有计数设置为 1。如果此锁已设置为使用公平排序策略,则在任何其他线程正在等待写锁时,将获取可用锁will not。这与tryLock()方法形成对比。如果你想要一个允许闯入公平锁的定时tryLock,那么将定时和非定时形式组合在一起:if (lock.tryLock() || lock.tryLock(timeout, unit)) { ... }如果当前线程已经持有此锁,则持有计数递增 1,并且该方法返回
true。如果锁由另一个线程持有,则当前线程将因线程调度目的而被禁用并处于休眠状态,直到发生以下三种情况之一:
- 写锁由当前线程获取;或者
- 一些其他线程中断当前线程;或者
- 指定的等待时间结束
如果获得写锁,则返回值
true并将写锁保持计数设置为 1。如果当前线程:
- 在进入此方法时设置其中断状态;或者
- 获取写锁时是interrupted,
InterruptedException并清除当前线程的中断状态。如果指定的等待时间过去,则返回值
false。如果时间小于或等于零,则该方法根本不会等待。在此实现中,由于此方法是一个显式中断点,因此优先响应中断而不是正常或重入获取锁,并优先报告等待时间的流逝。
- 指定者:
tryLock在接口Lock中- 参数:
timeout- 等待写锁的时间unit- 超时参数的时间单位- 返回:
true如果锁是空闲的并且被当前线程获取,或者写锁已经被当前线程持有;和false如果在获取锁之前等待时间已经过去。- 抛出:
InterruptedException- 如果当前线程被中断NullPointerException- 如果时间单位为空
-
unlock
public void unlock()尝试释放此锁。如果当前线程是此锁的持有者,则持有计数将递减。如果保持计数现在为零,则释放锁。如果当前线程不是此锁的持有者,则抛出
IllegalMonitorStateException。- 指定者:
unlock在接口Lock中- 抛出:
IllegalMonitorStateException- 如果当前线程没有持有这个锁
-
newCondition
返回与此Lock实例一起使用的Condition实例。当与内置监视器锁一起使用时,返回的
Condition实例支持与Object监视器方法(wait、notify和notifyAll)相同的用法。- 如果在调用任何
Condition方法时未持有此写锁,则会抛出IllegalMonitorStateException。 (读锁独立于写锁持有,因此不会被检查或影响。然而,当当前线程也已获取读锁时调用条件等待方法本质上总是一个错误,因为其他可以解除阻塞的线程不会能够获取写锁。) - 当条件 等待 方法被调用时,写锁被释放,并且在它们返回之前,写锁被重新获取并且锁保持计数恢复到调用该方法时的状态。
- 如果一个线程在等待时是 interrupted 那么等待将终止,一个
InterruptedException将被抛出,线程的中断状态将被清除。 - 等待线程以 FIFO 顺序发出信号。
- 从等待方法返回的线程重新获取锁的顺序与最初获取锁的线程相同,默认情况下未指定,但对于 fair 锁有利于那些等待时间最长的线程。
- 指定者:
newCondition在接口Lock中- 返回:
- 条件对象
- 如果在调用任何
-
toString
-
isHeldByCurrentThread
public boolean isHeldByCurrentThread()查询此写锁是否由当前线程持有。与ReentrantReadWriteLock.isWriteLockedByCurrentThread()效果相同。- 返回:
true如果当前线程持有此锁,false否则- 自从:
- 1.6
-
getHoldCount
public int getHoldCount()查询当前线程持有此写锁的次数。对于与解锁操作不匹配的每个锁定操作,线程都持有一个锁。与ReentrantReadWriteLock.getWriteHoldCount()效果相同。- 返回:
- 当前线程持有此锁的次数,如果此锁未被当前线程持有,则为零
- 自从:
- 1.6
-