-2

我有这个简单的代码,它只是一个测试用例

        try
    {
        synchronized(this) {
        while(number != 4)
        {
            System.out.println("Waiting...");
            this.wait();
        }
        number = 4;
        this.notifyAll();
        }
        

    }
    catch(InterruptedException e)
    {}

在我所知道的关于使用 wait() 方法的知识中,一旦调用了等待,接下来应该做的事情。但是,在这种情况下,我看不到等待结束。我试图放置第二个同步块,但这似乎不起作用。

你知道是什么导致等待挂起吗?我查了一下死锁,但这似乎是完全不同的事情。

4

2 回答 2

0

认为你最好从这里得到一些想法

然后相应地修改您的代码,只要没有另一个线程正在运行。

wait() 方法使当前线程无限期地等待,直到另一个线程为此对象调用 notify() 或 notifyAll()。

于 2021-03-03T02:42:17.953 回答
0

你知道是什么导致等待挂起吗?

您有一个等待number设置为 4 的循环。没有执行设置为 4 的代码number。因此循环将永远等待。

    while(number != 4)
    {
        System.out.println("Waiting...");
        this.wait();
    }

    /* you can't get here until some other thread sets number to 4. */
    number = 4;
    this.notifyAll();
    }
    

wait调用不会终止,直到其他一些代码调用,notify然后当您从 中醒来时wait,您将再次循环返回,除非number现在是 4。

您不能让一个线程同时处于wait 执行发出notify. 如果wait不等待,它将没有用处。

无意粗鲁,但这里的问题似乎是对程序代码的顺序执行缺乏了解。

于 2021-03-03T02:45:28.363 回答