2

我有一个测试代码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方法给出的特定时间并打印它。但是每次打印几个值(随机次数)后它都会停止。

无法确定问题所在。

4

1 回答 1

6

您问题的关键在于java doc,wait其中的状态如下:-

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

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

更好地添加if检查random == 0

于 2014-06-11T17:59:09.797 回答