造成当前线程在接到信号、被中断或到达指定最后期限之前一直处于等待状态。
与此条件相关的锁以原子方式释放,并且出于线程调度的目的,将禁用当前线程,且在发生以下五种情况之一 以前,当前线程将一直处于休眠状态:
- 其他某个线程调用此
condition
的 signal()
方法,并且碰巧将当前线程选为被唤醒的线程;或者
- 其他某个线程调用此
condition
的 signalall()
方法;或者
- 其他某个线程中断当前线程,且支持中断线程的挂起;或者
- 指定的最后期限到了;或者
- 发生“虚假唤醒”。
在所有情况下,在此方法可以返回当前线程之前,都必须重新获取与此条件有关的锁。在线程返回时,可以保证 它保持此锁。
如果当前线程:
- 在进入此方法时已经设置了该线程的中断状态;或者
- 在支持等待和中断线程挂起时,线程被中断,
则抛出 interruptedexception
,并且清除当前线程的已中断状态。在第一种情况下,没有指定是否在释放锁之前发生中断测试。
返回值指示是否到达最后期限,使用方式如下:
synchronized boolean amethod(date deadline) {
boolean stillwaiting = true;
while (!conditionbeingwaitedfor) {
if (stillwaiting)
stillwaiting = thecondition.awaituntil(deadline);
else
return false;
}
// ...
}
实现注意事项
假定调用此方法时,当前线程保持了与此 condition
有关联的锁。这取决于确定是否为这种情况以及不是时,如何对此作出响应的实现。通常,将抛出一个异常(比如 illegalmonitorstateexception
)并且该实现必须对此进行记录。
与响应某个信号而返回的普通方法相比,或者与指示是否到达指定最终期限相比,实现可能更喜欢响应某个中断。在任意一种情况下,实现必须确保信号被重定向到另一个等待线程(如果有的话)。
- 参数:
deadline
- 一直处于等待状态的绝对时间
- 返回:
- 如果在返回时已经到达最后期限,则返回
false
,否则返回 true
- 抛出:
interruptedexception
- 如果当前线程被中断(并且支持中断线程挂起)