package testThread; public class Test3 { public static void main(String[] args) { Clerk c = new Clerk(); //消费时不生产,生产时不消费 //生产者 new Thread(new Runnable() { @Override public void 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.out.println("产品库存:"+c.productNum); } System.out.println("产品数为:"+c.productNum+",结束生产"); //唤醒消费者 c.notify(); }else { try { //生产者等待 c.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } },"生产者").start(); //消费者 new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub synchronized (c) { while(true) { if(c.productNum == 4) { System.out.println("库存为4,开始消费"); while(c.productNum>0) { c.productNum--; System.out.println("产品库存:"+c.productNum); } System.out.println("产品数为:"+c.productNum+",结束消费"); //唤醒生产者 c.notify(); }else { try { //消费者等待 c.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } },"消费者").start(); } } class Clerk{ public static int productNum = 0; }
部分输出:
产品为0,开始生产
产品库存:1
产品库存:2
产品库存:3
产品库存:4
产品数为:4,结束生产
库存为4,开始消费
产品库存:3
产品库存:2
产品库存:1
产品库存:0
产品数为:0,结束消费
产品为0,开始生产
产品库存:1
产品库存:2
产品库存:3
产品库存:4
产品数为:4,结束生产
原文地址:https://www.cnblogs.com/xiximayou/p/12076936.html
时间: 2024-11-05 15:51:52