在给出超时时等待无限时间

时间:2014-06-11 17:57:22

标签: java wait time-wait

我有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方法给出的特定时间并打印出来。 但每次打印几次后都会停止(随机次数)。

无法确定问题所在。

1 个答案:

答案 0 :(得分:6)

您的问题的关键在于wait的java文档,其中声明如下: -

  

指定的实时时间已经或多或少。但是,如果超时为零,则不考虑实时,并且线程只是等待通知。

因此,如果random返回 0 ,它会进入无限等待直到收到通知,这显然不会发生在您的代码中。

最好添加if检查 random == 0