java.lang.IllegalMonitorStateException是在调用object的wait()和notify(),notifyAll()方法的时候可能会出现的异常
在调用上述三个方法的时候,线程必须获得该对象的对象级别锁,换句话说,出现这个异常的原因是因为,调用wait()和notify(),notifyAll()的对象没有在同步方法(synchronized修饰的方法)或者同步代码块(synchronized(x){})中。
想要获取该对象的对象级别锁,也就只有在同步方法或同步代码块中,这两个也是有区别的
//不会报错
Object lock = new Object();
synchronized(lock){
lock.wait();
}
//会报错
Object lock = new Object();
synchronized(lock){
this.wait();
}来源:java.lang.IllegalMonitorStateException的解决方法