目录
一. 什么是阻塞队列
二. 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. 模拟实现阻塞队列
推荐文章
大家都在找:
java-ee:java-ee教程
Java:java下载
intellij-idea:intellij idea官网
jvm:jvm官网下载安装
到此这篇阻塞队列和非阻塞队列 性能区别(阻塞队列和非阻塞队列的区别)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/hd-xnyh/22680.html