Java 多线程 ⑨-生产者-消费者模型 || 阻塞队列 || 模拟实现BlockingQueue

这里是Themberfue


阻塞队列

· 在学习数据结构的时候,我们学习到了一个数据结构——队列——优先级队列,什么?忘了?没事,忘了是很正常的,温故而知新,可以为师矣~~

· 今天我们将深入——阻塞队列,其也可以称为一种新的数据结构,但它和队列还是有区别的

· 主要区别在于阻塞队列是线程安全的,还有其阻塞特性

· 阻塞特性:

        当队列放满时,如果此时还有线程想要入队列时,那么这个操作就会阻塞,直到有元素出队列为止

        但队列为空时,如果此时还有线程想要出队列时,那么这个操作也会阻塞,直到有元素入队列为止


生产者-消费者模型

· 我们先不聊其概念,我们先来构建一个场景:餐厅中的点餐和上菜过程

        · 在餐厅中,顾客点单和厨师制作菜品,有源源不断地顾客点单,同时厨师也一丝不苟地制作菜品以服务顾客,而顾客点的单不可能直接给到厨师手里,一般是通过前台服务员告知厨师需要制作相应地菜品

        · 我们将顾客类比为 "生产者",将厨师类比为 "消费者",如果 顾客 直接将订单交给 厨师 处理,那么 厨师 还要额外处理收取并处理这些订单,不能聚焦于制作菜品

        · 不单单时 厨师 会降低效率,如果此时订单太多,厨师 往往会处理不过来了,那么该订单就会丢失了;如果此时订单太少,厨师 还在制作菜品,导致不必要的浪费

        · 此时我们引入前台,顾客 将订单先交给前台,由前台收取并处理这些订单,厨师 只需要聚焦于制作菜品就好了,这将大大提升 厨师 的效率

        · 前台就可以类比为一个订单队列,当 订单队列 满时,顾客就需要等待,当订单队列为空时,厨师就需要等待

· 生产者-消费者模型:

        一种经典的并发设计模式,常用于解决多线程环境下的生产和消费任务协调问题。它通过共享缓冲区(通常是一个阻塞队列)来解耦生产者和消费者之间的耦合,解决生产速度和消费速度不匹配的问题

        设计目标:

                1. 解耦生产者和消费者:生产者和消费者可以独立运行,无需直接依赖对方

                2. 平衡处理速度:通过缓冲区调节生产速度和消费速度的不匹配

                3. 线程安全:避免多个线程对共享资源的竞争导致的并发问题

·  生产者-消费者模型优势:

        1.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值