Module java.base

Class AbstractQueuedSynchronizer.ConditionObject

java.lang.Object
java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject
所有已实现的接口:
Serializable, Condition
封装类:
AbstractQueuedSynchronizer

public class AbstractQueuedSynchronizer.ConditionObject extends Object implements Condition, Serializable
作为AbstractQueuedSynchronizer的条件实现,用作Lock实现的基础。

此类的方法文档描述了机制,而不是从Lock和Condition用户的角度描述的行为规范。一般情况下,导出版本的此类需要附带描述条件语义的文档,这些条件语义依赖于相关的AbstractQueuedSynchronizer的语义。

此类可序列化,但所有字段都是瞬态的,因此反序列化的条件没有等待者。

参见:
  • Constructor Summary

    Constructors
    Constructor
    Description
    创建一个新的ConditionObject实例。
  • Method Summary

    Modifier and Type
    Method
    Description
    final void
    await()
    实现可中断的条件等待。
    final boolean
    await(long time, TimeUnit unit)
    实现定时条件等待。
    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
    将所有线程从此条件的等待队列移动到拥有锁的等待队列。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 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()
      实现不可中断的条件等待。
      1. 保存AbstractQueuedSynchronizer.getState()返回的锁状态。
      2. 使用保存的状态作为参数调用AbstractQueuedSynchronizer.release(int),如果失败则抛出IllegalMonitorStateException。
      3. 阻塞直到收到信号。
      4. 通过使用保存的状态作为参数调用AbstractQueuedSynchronizer.acquire(java.util.concurrent.locks.AbstractQueuedSynchronizer.Node, int, boolean, boolean, boolean, long)的专用版本来重新获取。
      指定者:
      awaitUninterruptibly 在接口 Condition
    • await

      public final void await() throws InterruptedException
      实现可中断的条件等待。
      1. 如果当前线程被中断,则抛出InterruptedException。
      2. 保存AbstractQueuedSynchronizer.getState()返回的锁状态。
      3. 使用保存的状态作为参数调用AbstractQueuedSynchronizer.release(int),如果失败则抛出IllegalMonitorStateException。
      4. 阻塞直到收到信号或被中断。
      5. 通过使用保存的状态作为参数调用AbstractQueuedSynchronizer.acquire(java.util.concurrent.locks.AbstractQueuedSynchronizer.Node, int, boolean, boolean, boolean, long)的专用版本来重新获取。
      6. 如果在步骤4中被阻塞时被中断,则抛出InterruptedException。
      指定者:
      await 在接口 Condition
      抛出:
      InterruptedException - 如果当前线程被中断(并支持线程挂起的中断)
    • awaitNanos

      public final long awaitNanos(long nanosTimeout) throws InterruptedException
      实现定时条件等待。
      1. 如果当前线程被中断,则抛出InterruptedException。
      2. 保存AbstractQueuedSynchronizer.getState()返回的锁状态。
      3. 使用保存的状态作为参数调用AbstractQueuedSynchronizer.release(int),如果失败则抛出IllegalMonitorStateException。
      4. 阻塞直到收到信号、被中断或超时。
      5. 通过使用保存的状态作为参数调用AbstractQueuedSynchronizer.acquire(java.util.concurrent.locks.AbstractQueuedSynchronizer.Node, int, boolean, boolean, boolean, long)的专用版本来重新获取。
      6. 如果在步骤4中被阻塞时被中断,则抛出InterruptedException。
      指定者:
      awaitNanos 在接口 Condition
      参数:
      nanosTimeout - 等待的最长时间,以纳秒为单位
      返回:
      从此方法返回时,nanosTimeout值减去等待时间的估计值。可以将正值用作此方法的后续调用的参数,以完成所需时间的等待。小于或等于零的值表示没有剩余时间。
      抛出:
      InterruptedException - 如果当前线程被中断(并支持线程挂起的中断)
    • awaitUntil

      public final boolean awaitUntil(Date deadline) throws InterruptedException
      实现绝对定时条件等待。
      1. 如果当前线程被中断,则抛出InterruptedException。
      2. 保存AbstractQueuedSynchronizer.getState()返回的锁状态。
      3. 使用保存的状态作为参数调用AbstractQueuedSynchronizer.release(int),如果失败则抛出IllegalMonitorStateException。
      4. 阻塞直到收到信号、被中断或超时。
      5. 通过使用保存的状态作为参数调用AbstractQueuedSynchronizer.acquire(java.util.concurrent.locks.AbstractQueuedSynchronizer.Node, int, boolean, boolean, boolean, long)的专用版本来重新获取。
      6. 如果在步骤4中被阻塞时被中断,则抛出InterruptedException。
      7. 如果在步骤4中被阻塞时超时,则返回false,否则返回true。
      指定者:
      awaitUntil 在接口 Condition
      参数:
      deadline - 等待的绝对时间
      返回:
      如果从此方法返回时已经过了截止时间,则返回false,否则返回true
      抛出:
      InterruptedException - 如果当前线程被中断(并支持线程挂起的中断)
    • await

      public final boolean await(long time, TimeUnit unit) throws InterruptedException
      实现定时条件等待。
      1. 如果当前线程被中断,则抛出InterruptedException。
      2. 保存AbstractQueuedSynchronizer.getState()返回的锁状态。
      3. 使用保存的状态作为参数调用AbstractQueuedSynchronizer.release(int),如果失败则抛出IllegalMonitorStateException。
      4. 阻塞直到收到信号、被中断或超时。
      5. 通过使用保存的状态作为参数调用AbstractQueuedSynchronizer.acquire(java.util.concurrent.locks.AbstractQueuedSynchronizer.Node, int, boolean, boolean, boolean, long)的专用版本来重新获取。
      6. 如果在步骤4中被阻塞时被中断,则抛出InterruptedException。
      7. 如果在步骤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

      protected final Collection<Thread> getWaitingThreads()
      返回包含可能正在等待此条件的线程的集合。实现AbstractQueuedSynchronizer.getWaitingThreads(ConditionObject)
      返回:
      线程的集合
      抛出:
      IllegalMonitorStateException - 如果AbstractQueuedSynchronizer.isHeldExclusively()返回false