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 条件语义的文档。
此类是可序列化的,但所有字段都是瞬态的,因此反序列化条件没有等待者。
- 参见:
-
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述final voidawait()实现可中断条件等待。final boolean实现定时条件等待。final longawaitNanos(long nanosTimeout) 实现定时条件等待。final void实现不间断条件等待。final booleanawaitUntil(Date deadline) 实现绝对定时条件等待。protected final Collection<Thread>返回一个集合,其中包含可能正在等待此条件的那些线程。protected final int返回等待此条件的线程数的估计值。protected final boolean查询是否有任何线程正在等待此条件。final voidsignal()将等待时间最长的线程(如果存在)从该条件的等待队列移动到拥有锁的等待队列。final void将所有线程从该条件的等待队列移动到拥有锁的等待队列。
-
构造方法详细信息
-
ConditionObject
public ConditionObject()创建一个新的ConditionObject实例。
-
-
方法详情
-
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
-