【问题标题】:waiting for infinte time when timeout is given给定超时时等待无限时间
【发布时间】:2014-06-11 17:57:22
【问题描述】:

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

无法确定问题所在。

【问题讨论】:

    标签: java wait time-wait


    【解决方案1】:

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

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

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

    最好添加if 检查random == 0

    【讨论】:

    • 当然是:random == 0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2017-10-17
    • 1970-01-01
    • 2016-12-16
    相关资源
    最近更新 更多