[英]waiting for infinte time when timeout is given
我有一个用于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
方法给出的特定时间并打印出来。 但是每次打印完几个值后都会停止(随机次数)。
无法识别问题所在。
您问题的关键在于wait
java doc,其状态如下:-
指定的实时量或多或少已经过去。 但是,如果超时为零,则不考虑实时,线程只是等待直到通知。
因此,如果random
返回0 ,它将进入无限等待状态直到得到通知为止,这显然在您的代码中没有发生。
最好添加if
检查random == 0 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.