经典设计模式之 -- 使用阻塞队列实现“生产者-消费者模型”

目录

一、阻塞队列和“生产者-消费者模型”之间的关系

二、标准库提供了阻塞队列

三、实现自己的阻塞队列

3.1 基于数组实现普通的环形队列

3.2 将上述代码改造为线程安全

3.3 增加阻塞功能

四、使用阻塞队列实现“生产者-消费者模型”


一、阻塞队列和“生产者-消费者模型”之间的关系

1)什么是阻塞队列?

队列是一种“先进先出”的数据结构,阻塞队列是一种带有阻塞功能、线程安全的队列。

当队列满时,继续入队列则会阻塞,直到队列不为满时,才会继续入队列。

当队列空时,继续出队列则会阻塞,直到队列不为空时,才会继续出队列。

2)什么是“生产者-消费者模型”?

“生产者-消费者模型”是一种经典的开发模型,是阻塞队列的典型应用场景。

“生产者-消费者模型”主要由生产者-容器(阻塞队列)-消费者构成。

3)阻塞队列在“生产者-消费者模型”中的作用
<1>

阻塞队列可以让生产者和消费者之间解耦合。

使用阻塞队列后,生产者和消费者之间不再直接通信,而是通过阻塞队列进行沟通。

<2> 阻塞队列相当于生产者和消费者之间的缓冲区,可以平衡“生产速度”和“消费速度”。

图示演示“生产者-消费者模型”:


二、标准库提供了阻塞队列

1)标准库提供了哪些阻塞队列?

在 Java 标准库中内置了阻塞队列 —— BlockingQueue 。 

BlockingQueue 是一个接口,接口的实现类包括 ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue 等。

2)BlockingQueue 的常用方法

常用方法有:

put() 方法,带阻塞功能,用于入队列。

take() 方法,带阻塞功能,用于出队列。

BlockingQueue 也提供了 offer()、poll()、peek() 等方法,但这些方法没有阻塞功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值