先把代码贴出来,最后再分析。 public class ProducerConsumerTest { public static void main(String[] args) { CubbyHole c = new CubbyHole(); Producer p1 = new Producer(c,1); Consumer c1 = new Consumer(c,1); p1.start(); c1.start(); } } class CubbyHole{ private int seq; private boolean available = false; public synchronized int get(){ while(available == false){ try{ wait(); }catch(InterruptedException e){} } available = false; notify(); return seq; } public synchronized void put(int value){ while(available == true){ try{ wait(); }catch(InterruptedException e){} } seq = value; available = true; notify(); } } class Producer extends Thread{ private CubbyHole cubbyhole; private int number; public Producer(CubbyHole c, int number){ cubbyhole = c; this.number = number; } public void run(){ for(int i=0; i<10; i++){ cubbyhole.put(i); System.out.println("Producer #"+ this.number + "put:"+ i); try{ sleep((int)(Math.random()*100)); }catch(InterruptedException e){} } } } class Consumer extends Thread{ private CubbyHole cubbyhole; private int number; public Consumer(CubbyHole c, int number){ cubbyhole = c; this.number = number; } public void run(){ int value = 0; for(int i=0; i<10; i++){ value = cubbyhole.get(); System.out.println("Consumer #"+ this.number+"got"+ value); } } } 运行结果是: Consumer #1got0 Producer #1put:0 Producer #1put:1 Consumer #1got1 Consumer #1got2 Producer #1put:2 Producer #1put:3 Consumer #1got3 Producer #1put:4 Consumer #1got4 Producer #1put:5 Consumer #1got5 Consumer #1got6 Producer #1put:6 Producer #1put:7 Consumer #1got7 Producer #1put:8 Consumer #1got8 Producer #1put:9 Consumer #1got9