Object.wait(0) 永远等待
Object.wait(0) waits forever
我有一段下面的代码,其中等待时间是在别处计算的。
在某些情况下等待时间值为 0,我注意到当等待时间为零时线程似乎永远等待。我在 Javadoc 中找不到任何特定于这种情况的内容。我可以为此添加一个检查,但我只需要了解为什么会发生这种情况以及是否允许发送 0 等待时间
synchronized (monitor) {
try {
monitor.wait(wait);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
来自the Javadocs:
If timeout
is zero, however, then real time is not taken into consideration and the thread simply waits until notified.
如果您的目标是避免在 wait
值为零时等待,您可以添加一个条件:
if (wait > 0) {
synchronized (monitor) {
try {
monitor.wait(wait);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
If timeout is zero, however, then real time is not taken into consideration and the thread simply waits until notified.
所以指定wait(0)
意味着无限期等待。
Object.wait(0);
只会让它永远等待。因此,您可以将代码嵌入 if
条件,
if(wait>0)
{
//your code
}
我有一段下面的代码,其中等待时间是在别处计算的。 在某些情况下等待时间值为 0,我注意到当等待时间为零时线程似乎永远等待。我在 Javadoc 中找不到任何特定于这种情况的内容。我可以为此添加一个检查,但我只需要了解为什么会发生这种情况以及是否允许发送 0 等待时间
synchronized (monitor) {
try {
monitor.wait(wait);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
来自the Javadocs:
If
timeout
is zero, however, then real time is not taken into consideration and the thread simply waits until notified.
如果您的目标是避免在 wait
值为零时等待,您可以添加一个条件:
if (wait > 0) {
synchronized (monitor) {
try {
monitor.wait(wait);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
If timeout is zero, however, then real time is not taken into consideration and the thread simply waits until notified.
所以指定wait(0)
意味着无限期等待。
Object.wait(0);
只会让它永远等待。因此,您可以将代码嵌入 if
条件,
if(wait>0)
{
//your code
}