IllegalMonitorStateException异常
一,wait/notify/notifyAll 的使用条件
wait/notify/notifyAll 方法必须要在加了锁的代码块中才能使用。否则就会抛出IllegalMonitorStateException异常
二,加锁时不正确使用 wait/notify/notifyAll 时报了-IllegalMonitorStateException异常的原因
public class Demo7 {
public static void main(String[] args) {
// 锁对象1
Object object = new Object();
// 锁对象2
Object newObject = new Object();
Thread thread = new Thread(() -> {
synchronized (object) {
try {
newObject.wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
});
thread.start();
}
}
【执行结果】抛出了IllegalMonitorStateException异常
【产生原因】是因为调用 wait/notify/notifyAll 方法的对象和锁对象不相同。
【结论】要正确调用 wait/notify/notifyAll 方法有两个条件:
- 是要在加锁代码块中使用。
- 调用方法的对象必须和锁对象一致。