Object.wait(0)永远等待

时间:2015-04-27 04:47:36

标签: java multithreading wait

我有一段代码,其中等待时间是在别处计算的。 在某些情况下,等待时间值为0,我注意到当等待时间为零时,线程似乎永远等待。我在Javadoc中找不到任何特定于此案例的内容。我可以为此添加一个检查,但我只需要了解为什么会发生这种情况并允许发送0等待时间

synchronized (monitor) {
    try {
        monitor.wait(wait);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

3 个答案:

答案 0 :(得分:14)

Javadocs say

  

但是,如果超时为零,则不考虑实时,并且线程只是等待通知。

因此指定wait(0)意味着无限期等待。

答案 1 :(得分:5)

来自the Javadocs

  

如果timeout为零,则不考虑实时,线程只是等待通知。

如果您的目标是避免在wait值为零时等待,则可以添加条件:

if (wait > 0) {
    synchronized (monitor) {
        try {
            monitor.wait(wait);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

答案 2 :(得分:1)

Object.wait(0);

只会让它永远等待。因此,您可以将代码嵌入if条件

if(wait>0)
{
//your code
}