繁体   English   中英

等待超时时给出的超时时间

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM