【问题标题】: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();
}
}
}
【解决方案3】:
Object.wait(0);
只会让它永远等待。因此,您可以将代码嵌入到 if 条件中,
if(wait>0)
{
//your code
}