代码:
public void push() {
while (production > 1) {
System.out.println("请等待消费者取走." + production);
try {
synchronized (this) {
wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
synchronized (Storage.class) {
production++;
}
System.out.println("生产一个,目前库存 " + production);
Storage.class.notifyAll();
}
报出了:java.lang.IllegalMonitorStateException非法检测状态
将wait()和notify()(或者niotifyAll)全部放入synchronized 快中就ok了。
public void push() {
while (production > 1) {
System.out.println("请等待消费者取走." + production);
try {
synchronized (this) {
wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
synchronized (Storage.class) {
production++;
}
System.out.println("生产一个,目前库存 " + production);
synchronized (Storage.class) {
Storage.class.notifyAll();
}
}
原因是如果不具备synchronized ()括号中对象的锁标记,就不能对该对象wait()notify()操作。所以报出java.lang.IllegalMonitorStateException。所以必须把wait()notify()