一、概述
生产者消费者模式是一个十分经典的多线程协作的模式,弄懂生产者消费者问题能够让我们对多线程编程的理解更加深刻。所谓生产者和消费者问题,实际上就是两个线程:
生产者:生产数据以供消费者消费,即生产者线程。
消费者:消费生产者生产的数据,即消费者线程。
在这个过程中,生产者生产数据之后直接放置在共享数据区中,并不需要关心消费者的行为 消费者只需要从共享数据区中去获取数据,并不需要关心生产者的行为。
二、举个栗子
假如有两个角色:吃货、厨师。还有一个辅助角色——桌子。厨师负责做包子,吃货负责吃包子。我们有这么一个场景:
如果桌子上有包子,吃货就吃掉包子,如果桌子上没有包子,吃货就会去叫厨师做包子并且等待包子做好;
如果桌子上没有包子,厨师就会做包子,如果桌子上有包子,厨师就会叫吃货吃包子并且等待包子吃完后再做。
三、系统需求分析:
桌子类:普通类。负责定义包子数量,包子有无
厨师类:线程类。这里我们通过实现继承Thread类,重写run方法实现。负责做以下事情:
1.判断是否有包子,决定当前线程是否执行
2.如果有包子,就进入等待状态,如果没有包子,继续执行,生产包子
3.生产包子之后,更新桌子上包子状态,唤醒消费者消费包子
吃货类:线程类。这里我们通过实现继承Thread类,重写run方法实现。负责做以下事情:
1.判断是否有包子,决定当前线程是否执行
2.如果没有包子,就进入等待状态,如果有包子,就消费包子
3.消费包子后,更新桌子上包子状态,唤醒生产者生产包子
四、代码实现(一):
desk类的具体代码:
public class desk {
// 判断桌子上有没有包子
public static boolean flag=false;
// 定义包子的数量
public static int count=10;
//定义吃货和厨师的唯一锁
public static final Object obj = new Object();
}
foodie吃货类的具体代码“
<