我有wait(timeout)
的测试代码。
public static void main(String[] args) throws Exception
{
Runnable r = new Runnable()
{
public void run()
{
while (true)
{
int random = (int)(Math.random() * 10);
synchronized(this)
{
try
{
wait(random);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
System.out.println(random);
}
}
};
new Thread(r).start();
}
但是,这似乎无法正常工作,理想情况下它应该等待random
方法给出的特定时间并打印出来。
但每次打印几次后都会停止(随机次数)。
无法确定问题所在。
答案 0 :(得分:6)
您的问题的关键在于wait
的java文档,其中声明如下: -
指定的实时时间已经或多或少。但是,如果超时为零,则不考虑实时,并且线程只是等待通知。
因此,如果random
返回 0 ,它会进入无限等待直到收到通知,这显然不会发生在您的代码中。
最好添加if
检查 random == 0 。