Object.wait(0) 永远等待

问题描述 投票:0回答:3

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

synchronized (monitor) {
    try {
        monitor.wait(wait); // <-- sometime 0
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
java multithreading wait
3个回答
17
投票

Javadocs 说

然而,如果超时为零,则不考虑实时,线程只是等待直到收到通知。

所以指定

wait(0)
意味着无限期等待。


6
投票

来自Javadocs

但是,如果

timeout
为零,则不考虑实时,线程只是等待直到收到通知。

如果你的目标是避免在你的

wait
值为零时等待,你可以添加一个条件:

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

1
投票
Object.wait(0);

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

if
条件中,

if(wait>0)
{
//your code
}
© www.soinside.com 2019 - 2024. All rights reserved.