package cp4; import java.util.concurrent.locks.Lock; public class PCV2 { private int i; private volatile boolean isProduced; final private Object LOCK=new Object(); private void consume(){ synchronized (LOCK){ //消费数据 if(isProduced){ System.out.println("c-->"+(i)); LOCK.notify();//激活 isProduced=false; }} } private void produce(){ synchronized (LOCK){ //如果生产者消费完就等着, if(isProduced){ try { LOCK.wait(); } catch (InterruptedException e) { e.printStackTrace(); } }else{ System.out.println("p-->"+(i++)); isProduced=true; LOCK.notify(); } } } public static void main(String[] args) { final PCV2 pcv = new PCV2(); new Thread("P"){ @Override public void run() { // while (true){ pcv.produce(); } } }.start(); new Thread("C"){ @Override public void run() { // while (true){ pcv.consume(); } } }.start(); } }