理解 生产者-消费者模式

★模式的基本概念

生产者 :产生数据的模块
消费者 :消费(接收和处理)数据的模块
缓冲区 :介于生产者和消费者之间,生产者把数据放入缓冲区,消费者从缓冲区中取出数据
在这里插入图片描述
倒垃圾
1.生产垃圾(生产者生产数据)
2.下楼把垃圾放在垃圾桶里 (将数据放入缓冲区)
3.环卫工人来处理垃圾桶 (消费者接收数据)
4.垃圾装车并处理 (消费者处理数据)

那么这个模式有什么好处呢,为什么不把垃圾直接给环卫工人呢

优1

就是解耦和,两者之间不直接依赖,都依赖于缓冲区

优2

支持并发操作
上述例子,你垃圾不扔垃圾桶,你直接给环卫工人,工人一天处理那么多垃圾,挨家挨户的处理,你就得等着,等他来处理你的垃圾。
如果你把垃圾扔垃圾桶,你们两个是独立的并发主体,你把垃圾往垃圾桶里这么一扔,你就可以接着去生产垃圾了,根本不依赖环卫工人的处理速度。

优3

支持忙闲不均
如果你生产垃圾的速度太快,环卫工人来不及处理,这时候垃圾桶就有用了,可以先把垃圾放垃圾桶里,等环卫工人处理

数据单元

放到垃圾桶里的垃圾,就是数据单元,有以下几个特性:
1.完整性 :垃圾得放在垃圾袋装好,都整漏了,人家还怎么处理
2.独立性 :垃圾分类要做好,垃圾互相独立,不一样的垃圾不能装一个袋
在这里插入图片描述
3.颗粒性 :处理垃圾的时候,环卫工人怎么处理是个问题,他怎么装包,是一包装一袋垃圾还是一包装10袋垃圾,颗粒太大会造成某种浪费,太小会影响性能问题

具体实现

https://blog.csdn.net/u010339647/article/details/52013123
可以参考一下这个博客的设计思路,用的多线程方式,他的方法二缺少一个Main函数,我给补上

import java.util.ArrayList;
public class Main {
    public static void main(String[] args) {
        Object object = new Object();
        ArrayList<Integer> list = new ArrayList<Integer>();
        MyService ms=new MyService();
        ProduceThread[] pt = new ProduceThread[2];
        ConsumeThread[] ct = new ConsumeThread[2];
        for(int i=0;i<2;i++){
            pt[i] = new ProduceThread(ms);
            pt[i].setName("生产者 "+(i+1));
            ct[i] = new ConsumeThread(ms);
            ct[i].setName("消费者"+(i+1));
            pt[i].start();
            ct[i].start();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值