恩。。一个小例子 结合了网上的信息然后自己再添了一点东西,最近开始看多线程。欢迎指正。 package c_p; class Procuder extends Thread{ private Godown godown; private int needCount; public Procuder(Godown godown, int needCount) { this.godown = godown; this.needCount = needCount; } public void run(){ godown.produce(needCount); } } class Consumer extends Thread{ private Godown godown; private int consumeCount; public Consumer(Godown godown, int consumeCount) { this.godown = godown; this.consumeCount = consumeCount; } public void run(){ godown.consume(consumeCount); } } public class Godown { public Godown(){} private final int MAX_COUNT = 100; private int nowCount = 0; public synchronized void produce(int needCount){ while(nowCount + needCount > MAX_COUNT){ System.out.println("仓储已满 。请稍后。"); try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } if(nowCount + needCount <= MAX_COUNT){ nowCount = nowCount + needCount; } System.out.println("增加了,现在仓储容量为:"+nowCount); notifyAll(); } public synchronized void consume(int consumeCount){ while(nowCount - consumeCount < 0 ){ System.out.println("仓储空了 。请稍后。"); try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } if(nowCount - consumeCount >= 0 ){ nowCount = nowCount - consumeCount; } System.out.println("减少了,现在仓储容量为:"+nowCount); if(nowCount == 0){ System.out.println("仓储为0,驱动生产一些产品。"); driverProduce(); } notifyAll(); } public synchronized void driverProduce(){ nowCount = (int)MAX_COUNT/2; System.out.println("驱动生产了"+nowCount+"个产品。"); } public static void main(String[] args) { Godown g = new Godown(); new Procuder(g, 20).start(); new Consumer(g, 20).start(); new Procuder(g, 20).start(); } }