浅谈多线程生产者和消费者问题(线程的等待和唤醒)

一、概述

        生产者消费者模式是一个十分经典的多线程协作的模式,弄懂生产者消费者问题能够让我们对多线程编程的理解更加深刻。所谓生产者和消费者问题,实际上就是两个线程:

        生产者:生产数据以供消费者消费,即生产者线程。

        消费者:消费生产者生产的数据,即消费者线程。

        在这个过程中,生产者生产数据之后直接放置在共享数据区中,并不需要关心消费者的行为 消费者只需要从共享数据区中去获取数据,并不需要关心生产者的行为。

二、举个栗子

        假如有两个角色:吃货、厨师。还有一个辅助角色——桌子。厨师负责做包子,吃货负责吃包子。我们有这么一个场景:

        如果桌子上有包子,吃货就吃掉包子,如果桌子上没有包子,吃货就会去叫厨师做包子并且等待包子做好;

        如果桌子上没有包子,厨师就会做包子,如果桌子上有包子,厨师就会叫吃货吃包子并且等待包子吃完后再做。

三、系统需求分析:

        桌子类:普通类。负责定义包子数量,包子有无

        厨师类:线程类。这里我们通过实现继承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吃货类的具体代码“

<
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值