在做项目的时候,遇到一个java.lang.IllegalMonitorStateException异常抛出,经过断点调试以及资料搜索,得知这个问题,是在于wait()和notify(),这两个等待的方法上,需synchronized加锁方法进行同步,如此这个问题就这么简单的解决了。一下代码是我遇到问题的示例:
没有synchronized加锁的情况,抛出该异常信息
public void get() {
// 如果flag=false
if (!flag) {
try {
this.wait();// 消费者等待
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 若是有的情况下,则消费者进行其购买
System.out.println(this.num + this.type);
// 如果flag为false,则已经卖完了
flag = false;
// 则等待生产者生产线程
this.notify();
}
}
加了synchronized的情况,得以解决
public synchronized void get() { // 如果flag=false,则表示没有包子 if (!flag) { try { this.wait();// 消费者等待 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } // 若是有的情况下,则消费者进行其购买 System.out.println(this.num + this.type); // 如果flag为false,则已经卖完了 flag = false; // 则等待生产者生产线程 this.notify(); } }