Java生产者消费者问题

描述

编写程序,实现生产者消费者案例。

题目

请编写程序,实现包子铺做包子、顾客吃包子的案例。

题目解决思路

  1. 创建一个盘子对象,用来存储包子。
  2. 创建一个锁对象。
  3. 当盘子为空时,生产者制作包子,制作完毕后则通知消费者。
  4. 当盘子中含有包子时,消费者吃包子,吃完后则通知生产者。

代码具体实现

盘子类:

public class PanZi { public boolean flag = false; }

测试类:

public class Test { public static void main(String[] args) { System.out.println("嗨客网(www.haicoder.net)\n"); PanZi panZi = new PanZi(); Object lock = new Object(); new Thread("包子铺"){ @Override public void run() { for (int i = 0; i < 2; i++) { synchronized (lock){ if(panZi.flag){ // 盘子里面有包子 try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } // 制作包子 System.out.println(getName() + " 正在制作包子..."); panZi.flag = true; // 通知消费者 System.out.println(getName() + " 已经制作好了..."); lock.notify(); } } } }.start(); new Thread("顾客"){ @Override public void run() { for (int i = 0; i < 2; i++) { synchronized (lock){ if(!panZi.flag){ // 盘子里面没有包子 try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } // 消费者吃包子 System.out.println(getName() + " 正在吃包子..."); panZi.flag = false; // 通知生产者 System.out.println(getName() + " 包子吃完了...\n"); lock.notify(); } } } }.start(); } }

运行结果如下图:

24 生产者消费者问题.png

以上案例实现了生产者消费者问题。