生产者和消费者问题-----管程法

首先声明,本人只是为了巩固知识而写博客,如果你看了这篇博客对你有帮助,那么我很开心,如果没有帮助,那我也很遗憾,如果有错误很高兴你指出来,只希望不要骂人,谢谢。

什么是生产者和消费者

首先,我们都学过生物,顾名思义可以知道,生产者就是负责生产东西的,
消费者就是用来消费东西的。

生产者和消费者有什么用

打个比方,我们去肯德基或者麦当劳点餐,那么我们就是线程里面的“消费者”,而那些负责制作食物的员工就是“生产者”
当我们点餐完成后,负责生产食物的人员不是去生产食物了,而是把之前生产好的食物搬到你的面前,然后你在开始进行用餐。
如果负责生产食物的人员发现食物的存储量已经低于一个值,那么这个时候,负责生产食物的人员就要开始去生产食物了,与此同时,消费者也要停止进餐,开始休息。

什么是缓冲区

这个很容易理解就相当于装食物的容器,我们去肯德基麦当劳点餐的时候,是不是会看见有一个大大的容器,里面就是装食物的,当我们把食物消灭到一定数量的时候,工作人员又开始继续制作食物了。

看图理解

在这里插入图片描述

代码实现(容器)

class RQ //定义一个容器类
{
   
    Egg[] eggs=new Egg[10];  //new一个鸡蛋数组就十个吧,鸡蛋类会在下面写到
    int count =1; //一开始有一个鸡蛋
    public synchronized void push(Egg egg ) throws InterruptedException {
   
        if(count==eggs.length) {
   
            this.wait();//如果鸡蛋的数量等于数组的长度,也就是十,线程开始等待,这个时候下面的代码不会执行
        }
        //当这个线程被唤醒,开始执行
        eggs[count]=egg;//
        count++;
        this.notifyAll();

    }

    public synchronized Egg pop() throws InterruptedException {
   
        if(count==1)
        {
   
            this.wait();//如果鸡蛋只有一个,那么线程开始等待
        }
        //线程被唤醒后开始执行
        count--;
        Egg egg=eggs[count];
        this.notifyAll();
        return egg;
    }

}


代码实现(生产者)

class scz implements <
  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code_BinBin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值