wait()和notify()需要注意的地方

284 阅读1分钟

java.lang.IllegalMonitorStateException是在调用objectwait()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的解决方法