第十一篇 队列的学习(三) 手写一个阻塞队列

举报
码农飞哥 发表于 2021/05/29 13:13:09 2021/05/29
【摘要】 前言 前面我们手写实现了一个单向队列,一个循环队列,今天我们再手写实现一个阻塞队列。顾名思义,阻塞队列就是在普通队列的基础上加了阻塞功能。本文是为了后面看ArrayBlockingQueue的源码做的前期准备。 阻塞队列 阻塞队列顾名思义就是一个具有阻塞功能的队列,当队满时,对这个队列的入队操作就要被阻塞,当队空时,对这个队列的出队操作就要被阻塞。那么阻塞队列是如...

前言

前面我们手写实现了一个单向队列,一个循环队列,今天我们再手写实现一个阻塞队列。顾名思义,阻塞队列就是在普通队列的基础上加了阻塞功能。本文是为了后面看ArrayBlockingQueue的源码做的前期准备。

阻塞队列

阻塞队列顾名思义就是一个具有阻塞功能的队列,当队满时,对这个队列的入队操作就要被阻塞,当队空时,对这个队列的出队操作就要被阻塞。那么阻塞队列是如何实现阻塞的呢?阻塞队列的底层的数据结构又是啥呢?带着这两个问题我们开始今天的手写阻塞队列之旅。

第一步:定义阻塞队列的数据结构

通过前面几篇的学习,我们知道了可以通过数组或者链表来实现阻塞队列,用数组来实现的队列,查找和插入的时间复杂度是O(1),存储比较高效。所以在此处,我们也将通过数组来实现队列。此处直接定义了一个Object数组。

 /** * 存放数据的数组 */ private volatile Object[] items;

  
 
  • 1
  • 2
  • 3
  • 4

第二步:设计阻塞功能

阻塞队列里的阻塞功能,实际上就是采用生产者-消费者模型来实现的。首先我们在来回顾下生产者

文章来源: feige.blog.csdn.net,作者:码农飞哥,版权归原作者所有,如需转载,请联系作者。

原文链接:feige.blog.csdn.net/article/details/104208957

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。