【问题标题】:Object.wait(0) waits foreverObject.wait(0) 永远等待
【发布时间】:2015-04-27 04:47:36
【问题描述】:

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

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

【问题讨论】:

    标签: java multithreading wait


    【解决方案1】:

    Javadocs say:

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

    所以指定wait(0) 意味着无限期等待。

    【讨论】:

    • 感谢您的快速回答,
    【解决方案2】:

    来自the Javadocs:

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

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

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

    【讨论】:

    • @Vulvan 感谢您的快速回复
    【解决方案3】:
    Object.wait(0);
    

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

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

    【讨论】:

      猜你喜欢
      • 2013-11-24
      • 2012-02-24
      • 1970-01-01
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多