package ConcurrentProgramme.OneProduceToOneClient;
public class P {
private String lock;
public P(String lock) {
this.lock = lock;
}
public void setValue() {
try {
synchronized (lock) {
if (!ValueObject.value.equals("")) {
lock.wait();
}
String value = System.currentTimeMillis() + "_" + System.nanoTime();
System.out.println("设置的值是:" + value);
ValueObject.value = value;
lock.notify();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Exception in thread "Thread-0" java.lang.IllegalMonitorStateException
at java.base/java.lang.Object.notify(Native Method)
at ConcurrentProgramme.OneProduceToOneClient.P.setValue(P.java:18)
at ConcurrentProgramme.OneProduceToOneClient.ThreadP.run(ThreadP.java:12)
在线线程中调用wait方法的时候 要用synchronized锁住对象,确保代码段不会被多个线程调用