我有这个简单的代码,它只是一个测试用例
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
不等待,它就不会有用。
无意冒犯,但这里的问题似乎是缺乏对程序代码顺序执行的理解。