Module java.base
Package java.util.concurrent.locks
Class AbstractQueuedSynchronizer.ConditionObject
java.lang.Object
java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject
- 所有已实现的接口:
-
Serializable
,Condition
public class AbstractQueuedSynchronizer.ConditionObject extends Object implements Condition, Serializable
作为AbstractQueuedSynchronizer的条件实现,用作Lock实现的基础。
此类的方法文档描述了机制,而不是从Lock和Condition用户的角度描述的行为规范。一般情况下,导出版本的此类需要附带描述条件语义的文档,这些条件语义依赖于相关的AbstractQueuedSynchronizer
的语义。
此类可序列化,但所有字段都是瞬态的,因此反序列化的条件没有等待者。
- 参见:
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionfinal void
await()
实现可中断的条件等待。final boolean
实现定时条件等待。final long
awaitNanos
(long nanosTimeout) 实现定时条件等待。final void
实现不可中断的条件等待。final boolean
awaitUntil
(Date deadline) 实现绝对定时条件等待。protected final Collection
<Thread> 返回一个包含可能正在等待此条件的线程的集合。protected final int
返回等待此条件的线程数的估计值。protected final boolean
查询是否有任何线程正在等待此条件。final void
signal()
将最长等待的线程(如果存在)从此条件的等待队列移动到拥有锁的等待队列。final void
将所有线程从此条件的等待队列移动到拥有锁的等待队列。
-
Constructor Details
-
ConditionObject
public ConditionObject()创建一个新的ConditionObject
实例。
-
-
Method Details
-
signal
public final void signal()将最长等待的线程(如果存在)从此条件的等待队列移动到拥有锁的等待队列。- 指定者:
-
signal
在接口Condition
中 - 抛出:
-
IllegalMonitorStateException
- 如果AbstractQueuedSynchronizer.isHeldExclusively()
返回false
-
signalAll
public final void signalAll()将所有线程从此条件的等待队列移动到拥有锁的等待队列。- 指定者:
-
signalAll
在接口Condition
中 - 抛出:
-
IllegalMonitorStateException
- 如果AbstractQueuedSynchronizer.isHeldExclusively()
返回false
-
awaitUninterruptibly
public final void awaitUninterruptibly()实现不可中断的条件等待。- 保存
AbstractQueuedSynchronizer.getState()
返回的锁状态。 - 使用保存的状态作为参数调用
AbstractQueuedSynchronizer.release(int)
,如果失败则抛出IllegalMonitorStateException。 - 阻塞直到收到信号。
- 通过使用保存的状态作为参数调用
AbstractQueuedSynchronizer.acquire(java.util.concurrent.locks.AbstractQueuedSynchronizer.Node, int, boolean, boolean, boolean, long)
的专用版本来重新获取。
- 指定者:
-
awaitUninterruptibly
在接口Condition
中
- 保存
-
await
实现可中断的条件等待。- 如果当前线程被中断,则抛出InterruptedException。
- 保存
AbstractQueuedSynchronizer.getState()
返回的锁状态。 - 使用保存的状态作为参数调用
AbstractQueuedSynchronizer.release(int)
,如果失败则抛出IllegalMonitorStateException。 - 阻塞直到收到信号或被中断。
- 通过使用保存的状态作为参数调用
AbstractQueuedSynchronizer.acquire(java.util.concurrent.locks.AbstractQueuedSynchronizer.Node, int, boolean, boolean, boolean, long)
的专用版本来重新获取。 - 如果在步骤4中被阻塞时被中断,则抛出InterruptedException。
- 指定者:
-
await
在接口Condition
中 - 抛出:
-
InterruptedException
- 如果当前线程被中断(并支持线程挂起的中断)
-
awaitNanos
实现定时条件等待。- 如果当前线程被中断,则抛出InterruptedException。
- 保存
AbstractQueuedSynchronizer.getState()
返回的锁状态。 - 使用保存的状态作为参数调用
AbstractQueuedSynchronizer.release(int)
,如果失败则抛出IllegalMonitorStateException。 - 阻塞直到收到信号、被中断或超时。
- 通过使用保存的状态作为参数调用
AbstractQueuedSynchronizer.acquire(java.util.concurrent.locks.AbstractQueuedSynchronizer.Node, int, boolean, boolean, boolean, long)
的专用版本来重新获取。 - 如果在步骤4中被阻塞时被中断,则抛出InterruptedException。
- 指定者:
-
awaitNanos
在接口Condition
中 - 参数:
-
nanosTimeout
- 等待的最长时间,以纳秒为单位 - 返回:
-
从此方法返回时,
nanosTimeout
值减去等待时间的估计值。可以将正值用作此方法的后续调用的参数,以完成所需时间的等待。小于或等于零的值表示没有剩余时间。 - 抛出:
-
InterruptedException
- 如果当前线程被中断(并支持线程挂起的中断)
-
awaitUntil
实现绝对定时条件等待。- 如果当前线程被中断,则抛出InterruptedException。
- 保存
AbstractQueuedSynchronizer.getState()
返回的锁状态。 - 使用保存的状态作为参数调用
AbstractQueuedSynchronizer.release(int)
,如果失败则抛出IllegalMonitorStateException。 - 阻塞直到收到信号、被中断或超时。
- 通过使用保存的状态作为参数调用
AbstractQueuedSynchronizer.acquire(java.util.concurrent.locks.AbstractQueuedSynchronizer.Node, int, boolean, boolean, boolean, long)
的专用版本来重新获取。 - 如果在步骤4中被阻塞时被中断,则抛出InterruptedException。
- 如果在步骤4中被阻塞时超时,则返回false,否则返回true。
- 指定者:
-
awaitUntil
在接口Condition
中 - 参数:
-
deadline
- 等待的绝对时间 - 返回:
-
如果从此方法返回时已经过了截止时间,则返回
false
,否则返回true
- 抛出:
-
InterruptedException
- 如果当前线程被中断(并支持线程挂起的中断)
-
await
实现定时条件等待。- 如果当前线程被中断,则抛出InterruptedException。
- 保存
AbstractQueuedSynchronizer.getState()
返回的锁状态。 - 使用保存的状态作为参数调用
AbstractQueuedSynchronizer.release(int)
,如果失败则抛出IllegalMonitorStateException。 - 阻塞直到收到信号、被中断或超时。
- 通过使用保存的状态作为参数调用
AbstractQueuedSynchronizer.acquire(java.util.concurrent.locks.AbstractQueuedSynchronizer.Node, int, boolean, boolean, boolean, long)
的专用版本来重新获取。 - 如果在步骤4中被阻塞时被中断,则抛出InterruptedException。
- 如果在步骤4中被阻塞时超时,则返回false,否则返回true。
- 指定者:
-
await
在接口Condition
中 - 参数:
-
time
- 等待的最长时间 -
unit
-time
参数的时间单位 - 返回:
-
如果在方法返回之前等待时间已经过去,则返回
false
,否则返回true
- 抛出:
-
InterruptedException
- 如果当前线程被中断(并支持线程挂起的中断)
-
hasWaiters
protected final boolean hasWaiters()查询是否有任何线程正在等待此条件。实现AbstractQueuedSynchronizer.hasWaiters(ConditionObject)
。- 返回:
-
如果有任何等待的线程,则返回
true
- 抛出:
-
IllegalMonitorStateException
- 如果AbstractQueuedSynchronizer.isHeldExclusively()
返回false
-
getWaitQueueLength
protected final int getWaitQueueLength()返回等待此条件的线程数的估计值。实现AbstractQueuedSynchronizer.getWaitQueueLength(ConditionObject)
。- 返回:
- 估计的等待线程数
- 抛出:
-
IllegalMonitorStateException
- 如果AbstractQueuedSynchronizer.isHeldExclusively()
返回false
-
getWaitingThreads
返回包含可能正在等待此条件的线程的集合。实现AbstractQueuedSynchronizer.getWaitingThreads(ConditionObject)
。- 返回:
- 线程的集合
- 抛出:
-
IllegalMonitorStateException
- 如果AbstractQueuedSynchronizer.isHeldExclusively()
返回false
-