void waitForSignal(){
Object ob =new Object();
synchronized (Thred.currentThread()) {
try {
ob.wait();
ob.notify();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
此方法引发IllegalMonitorStateException。有人可以解释原因。
提前致谢
答案 0 :(得分:4)
您应该只对已获得锁定的对象调用wait
。
在您的代码中,您已在Thread.currentThread()
上获得锁定,但您在ob
上调用它,这将引发IllegalMonitorStateException
。
因此,您应该将同步块更改为: -
synchronized (ob) {
}
答案 1 :(得分:1)
您想要同步您正在等待的对象:
synchronized (ob) {
try {
ob.wait();
ob.notify();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 2 :(得分:0)
如果您使用IllegalMonitorException(例如
)修复了问题void waitForSignal() {
Object ob = new Object();
synchronized (ob) {
您的代码无效。在您的代码中,每个线程都会创建一个新的锁,在方法外部不可见。其他线程没有机会通知等待的线程。