2025年阻塞队列和非阻塞队列 性能区别(阻塞队列和非阻塞队列的区别)

阻塞队列和非阻塞队列 性能区别(阻塞队列和非阻塞队列的区别)目录 一 什么是阻塞队列 二 java 中的阻塞队列 三 生产者消费者模型 3 1 生产者消费者模型与阻塞队列密不可分的关系 3 2 阻塞队列在生产者消费者模型的作用 a 解耦合 b 削峰填谷 四 模拟实现阻塞队列 4 1 实现 put 方法 4 2 实现 take 方法 4 3 生产者消费者模型 五 总结 一 什么是阻塞队列 阻塞队列是具有阻塞特性的队列 它是线程安全的

大家好,我是讯享网,很高兴认识大家。



目录

一. 什么是阻塞队列

二. java中的阻塞队列

三. 生产者消费者模型

3.1 生产者消费者模型与阻塞队列密不可分的关系

3.2 阻塞队列在生产者消费者模型的作用

a. 解耦合

b. 削峰填谷

四. 模拟实现阻塞队列

 4.1 实现put方法

4.2 实现take方法

4.3 生产者消费者模型​

五.总结

一. 什么是阻塞队列

阻塞队列是具有阻塞特性的队列, 它是线程安全的.

阻塞特性:

1. 出队列时, 如果队列为空, 此时就会阻塞, 直到向队列中添加元素为止.

2. 入队列时, 如果队列满了, 此时也会阻塞, 直到从队列中移出元素为止.

二. java中的阻塞队列

java中的阻塞队列是一个接口(BlockingQueue ), 常用的实例化类有:

1. ArrayBlockingQueue<>(capacity); // 顺序表

2. LinkedBlockingQueue<>(capacity); // 链表

3. PriorityBlockingQueue<>(capacity); // 优先级队列

带有阻塞效果的放取: put(), take().

三. 生产者消费者模型

3.1 生产者消费者模型与阻塞队列密不可分的关系

阻塞对列是生产者消费者模型的交易场所.

3.2 阻塞队列在生产者消费者模型的作用

a. 解耦合

解耦合之前, 服务器A直接和服务器B进行交互, 一旦服务器A中的代码发生了改变, 服务器B也需要做出相应的改变.(AB之间关系紧密)


讯享网

解耦合之后, 服务器A不再与服务器B直接关联, 而是通过阻塞队列来进行交互, 降低了AB之间的关联度.

b. 削峰填谷

 如果A传输给B的数据量激增, 而B没有这么大的接收能力, 就会导致服务器断线.

此时, 引入阻塞队列, 激增的数据就会在阻塞队列中进行缓冲, 输入给B的数据量不会超出B的接收能力.

四. 模拟实现阻塞队列

 4.1 实现put方法

重点解读:

synchronized: 保证put操作的原子性.

while: 进行多次判断, 防止notify之后循环队列还是满的, 而导致之后的操作没有意义.

if(tail >= data.length): 表示一次循环已经结束了, 再从头开始.

this.notify(): 此时队列中有元素了, 可以进行take操作.

4.2 实现take方法

重点解读: 

synchronized: 保证take操作的原子性

while: 进行多次判断, 防止notify之后队列还是空的, 导致后面的操作无意义.

4.3 生产者消费者模型        

五.总结

1. 什么是阻塞队列(阻塞队列时带有阻塞效果的队列, 是线程安全的)

2. 阻塞队列的实例化(ArrayBlockingQueue, LinkedBlockingQueue, PriorityBlockingQueue)

3. 生产者消费者模型与阻塞队列密不可分的关系(阻塞队列是生产者消费者模型的交易场所)

4. 阻塞队列在生产者消费者模型的作用(解耦合, 削峰填谷)

4. 模拟实现阻塞队列

推荐文章

&nbsp;&nbsp;


大家都在找:

java-ee:java-ee教程

Java:java下载

intellij-idea:intellij idea官网

jvm:jvm官网下载安装

小讯
上一篇 2025-06-06 19:32
下一篇 2025-05-30 21:08

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/172874.html