同步锁卡住的原因是什么?



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

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

}
catch(InterruptedException e)
{}

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

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

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

然后相应地修改你的代码,只要没有其他线程在运行。

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

您知道是什么原因导致等待挂起吗?

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

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不等待,它就不会有用。

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

最新更新