package testThread; public class Test3 { static void main(String[] args) { Clerk c = new Clerk(); //消费时不生产,生产时不消费 生产者 new Thread( Runnable() { @Override run() { TODO Auto-generated method stub synchronized (c) { 无限生产 while(true) { if(c.productNum == 0) { 开始生产 System.out.println("产品为0,开始生产"); while(c.productNum<4) { c.productNum++; System.产品库存:"+c.productNum); } System.产品数为:"+c.productNum+,结束生产唤醒消费者 c.notify(); }else { try { 生产者等待 c.wait(); } catch (InterruptedException e) { TODO Auto-generated catch block e.printStackTrace(); } } } } } },生产者).start(); 消费者 ) { System.库存为4,开始消费while(c.productNum>) { c.productNum--,结束消费唤醒生产者 消费者等待 消费者).start(); } } Clerk{ int productNum = ; }
部分输出:
产品为0,开始生产
产品库存:1
产品库存:2
产品库存:3
产品库存:4
产品数为:4,结束生产
库存为4,开始消费
产品库存:3
产品库存:2
产品库存:1
产品库存:0
产品数为:0,结束消费
产品为0,开始生产
产品库存:1
产品库存:2
产品库存:3
产品库存:4
产品数为:4,结束生产