Java 对象。等待(0)将永远等待

Java 对象。等待(0)将永远等待,java,multithreading,wait,Java,Multithreading,Wait,我有一段下面的代码,其中等待时间是在别处计算的。 在某些情况下,等待时间值为0,我注意到当等待时间为0时,线程似乎会永远等待。我在Javadoc中找不到任何与此案例相关的内容。我可以添加一个检查,但我只需要了解为什么会发生这种情况,是否允许发送0等待时间 synchronized (monitor) { try { monitor.wait(wait); } catch (InterruptedException e) { e.printStack

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

synchronized (monitor) {
    try {
        monitor.wait(wait);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
发件人:

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

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

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

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

因此,指定wait0意味着无限期地等待

Object.wait(0);
只会让它永远等待。因此,您可以将代码嵌入if条件中

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

感谢您的快速回答,@Vulvan感谢您的快速回复