java 对象.wait(0)永远等待

2vuwiymt  于 2023-04-10  发布在  Java
关注(0)|答案(3)|浏览(277)

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

synchronized (monitor) {
    try {
        monitor.wait(wait); // <-- sometime 0
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
jv4diomz

jv4diomz1#

Javadoc说:
但是,如果timeout为零,则不考虑真实的,线程只是等待,直到收到通知。
所以指定wait(0)意味着无限期等待。

ifmq2ha2

ifmq2ha22#

关于Javadoc:
但是,如果timeout为零,则不考虑真实的性,线程只是等待通知。
如果您的目标是避免在wait值为零时等待,则可以添加一个条件:

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

6rvt4ljy3#

Object.wait(0);

会让它永远等待。所以你可以把你的代码嵌入到一个if条件中,

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

相关问题