JavaTM 2 Platform
Standard Ed. 5.0

java.util.concurrent.locks
类 AbstractQueuedSynchronizer.ConditionObject

java.lang.Object
  继承者 java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject
所有已实现的接口:
Serializable, Condition
正在封闭类:
AbstractQueuedSynchronizer

public class AbstractQueuedSynchronizer.ConditionObject
extends Object
implements Condition, Serializable

AbstractQueuedSynchronizer 的 Condition 实现是 Lock 实现的基础。

此类的方法文档描述了一些机制,但没有从 Lock 和 Condition 用户的角度描述行为规范。此类的发行版本通常必须和描述 condition 语义的文档一起提供,这些语义依赖于相关 AbstractQueuedSynchronizer 的那些语义。

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

另请参见:
序列化表格

构造方法摘要
AbstractQueuedSynchronizer.ConditionObject()
          创建一个新的 ConditionObject 实例。
 
方法摘要
 void await()
          实现不可中断的条件等待。
 boolean await(long time, TimeUnit unit)
          实现定时的条件等待。
 long awaitNanos(long nanosTimeout)
          实现定时的条件等待。
 void awaitUninterruptibly()
          实现不可中断的条件等待。
 boolean awaitUntil(Date deadline)
          实现绝对定时条件等待。
protected  Collection<Thread> getWaitingThreads()
          返回包含那些可能正在等待此条件的线程 collection。
protected  int getWaitQueueLength()
          返回正在等待此条件的线程数估计值。
protected  boolean hasWaiters()
          查询是否有正在等待此条件的任何线程。
 void signal()
          将等待时间最长的线程(如果存在)从此条件的等待队列中移动到拥有锁定的等待队列。
 void signalAll()
          将所有线程从此条件的等待队列移动到拥有锁定的等待队列中。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

AbstractQueuedSynchronizer.ConditionObject

public AbstractQueuedSynchronizer.ConditionObject()
创建一个新的 ConditionObject 实例。

方法详细信息

signal

public final void signal()
将等待时间最长的线程(如果存在)从此条件的等待队列中移动到拥有锁定的等待队列。

指定者:
接口 Condition 中的 signal
抛出:
IllegalMonitorStateException - 如果 AbstractQueuedSynchronizer.isHeldExclusively() 返回 false

signalAll

public final void signalAll()
将所有线程从此条件的等待队列移动到拥有锁定的等待队列中。

指定者:
接口 Condition 中的 signalAll
抛出:
IllegalMonitorStateException - 如果 AbstractQueuedSynchronizer.isHeldExclusively() 返回 false

awaitUninterruptibly

public final void awaitUninterruptibly()
实现不可中断的条件等待。
  1. 保存 AbstractQueuedSynchronizer.getState() 返回的锁定状态
  2. 调用将保存的状态用作参数的 AbstractQueuedSynchronizer.release(int),如果失败则抛出 IllegalMonitorStateException。
  3. 在收到信号之前,会一直阻塞
  4. 通过调用将保存的状态用作参数的 AbstractQueuedSynchronizer.acquire(int) 特殊版本来重新获得线程。

指定者:
接口 Condition 中的 awaitUninterruptibly

await

public final void await()
                 throws InterruptedException
实现不可中断的条件等待。
  1. 如果当前线程被中断,则抛出 InterruptedException
  2. 保存 AbstractQueuedSynchronizer.getState() 返回的锁定状态
  3. 调用将保存的状态用作参数的 AbstractQueuedSynchronizer.release(int),如果失败则抛出 IllegalMonitorStateException。
  4. 在收到信号或被中断之前,会一直阻塞
  5. 通过调用将保存的状态用作参数的 AbstractQueuedSynchronizer.acquire(int) 特殊版本来重新获得线程。
  6. 如果因为在步骤 4 中受阻而中断,则抛出异常

指定者:
接口 Condition 中的 await
抛出:
InterruptedException - 如果当前线程被中断(并且支持中断线程挂起)。

awaitNanos

public final long awaitNanos(long nanosTimeout)
                      throws InterruptedException
实现定时的条件等待。
  1. 如果当前线程被中断,则抛出 InterruptedException
  2. 保存 AbstractQueuedSynchronizer.getState() 返回的锁定状态
  3. 调用将保存的状态用作参数的 AbstractQueuedSynchronizer.release(int),如果失败则抛出 IllegalMonitorStateException。
  4. 在收到信号、被中断或超时之前,会一直阻塞
  5. 通过调用将保存的状态用作参数的 AbstractQueuedSynchronizer.acquire(int) 特殊版本来重新获得线程。
  6. 如果因为在步骤 4 中受阻而中断,则抛出 InterruptedException

指定者:
接口 Condition 中的 awaitNanos
参数:
nanosTimeout - 等待的最长时间,以毫微秒为单位
返回:
如果超时,则返回一个小于或等于 0 的值;否则返回此方法返回时所剩余时间的估计值,该值绝对小于 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(int) 特殊版本来重新获得线程。
  6. 如果因为在步骤 4 中受阻而中断,则抛出 InterruptedException
  7. 如果因为在步骤 4 中受阻而超时,则返回 false,其他情况返回 true

指定者:
接口 Condition 中的 awaitUntil
参数:
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(int) 特殊版本来重新获得线程。
  6. 如果因为在步骤 4 中受阻而中断,则抛出 InterruptedException
  7. 如果因为在步骤 4 中受阻而超时,则返回 false,其他情况返回 true

指定者:
接口 Condition 中的 await
参数:
time - 最长等待时间
unit - time 参数的时间单位。
返回:
如果在从此方法返回前检测到等待时间超时,则返回 false,否则返回 true
抛出:
InterruptedException - 如果当前线程被中断(并且支持中断线程挂起)。

hasWaiters

protected final boolean hasWaiters()
查询是否有正在等待此条件的任何线程。实现 AbstractQueuedSynchronizer.hasWaiters(java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject)

返回:
如果有正在等待的任何线程,则返回 true
抛出:
IllegalMonitorStateException - 如果 AbstractQueuedSynchronizer.isHeldExclusively() 返回 false

getWaitQueueLength

protected final int getWaitQueueLength()
返回正在等待此条件的线程数估计值。实现 AbstractQueuedSynchronizer.getWaitQueueLength(java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject)

返回:
正在等待的线程估计数。
抛出:
IllegalMonitorStateException - 如果 AbstractQueuedSynchronizer.isHeldExclusively() 返回 false

getWaitingThreads

protected final Collection<Thread> getWaitingThreads()
返回包含那些可能正在等待此条件的线程 collection。实现 AbstractQueuedSynchronizer.getWaitingThreads(java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject)

返回:
线程的 collection
抛出:
IllegalMonitorStateException - 如果 AbstractQueuedSynchronizer.isHeldExclusively() 返回 false

JavaTM 2 Platform
Standard Ed. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策