前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >阻塞队列的核心方法&对阻塞的不同处理

阻塞队列的核心方法&对阻塞的不同处理

作者头像
名字是乱打的
发布2022-05-13 12:35:03
6820
发布2022-05-13 12:35:03
举报
文章被收录于专栏:软件工程

阻塞队列,顾名思义,首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如下图所示:

阻塞队列

  • 当阻塞队列是空时,从队列中获取元素的操作将会被阻塞。
  • 当阻塞队列是满时,往队列里添加元素的操作将会被阻塞。

试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。 同样 试图往己满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他的线程从列中移除一个或者多个元素或者完全清空队列后使队列重新变得空闲起来并后续新增

在多线程领域:所谓阻塞,在某些情况下会起线程(即阻塞),一旦条件满足,被挂起的线程又会自动被唤醒

为什么需要BlockingQueue

好处:我们不需要关心什么时候需要阻塞线程,什么时候需要唤醒线程,因为这一切BlockingQueue都给你一手包办了. 在concurrent包发布以前,在多线程环境下,我们每个程序员都必须去自己控制这些细节,尤其还要兼顾效率和线程安全,而这会给我们的程序带来不小的复杂度.

BlockingQueue种类👇(BlockingQueue是隶属于Collection下的BlockingQueue接口,于list,set平级)
BlockingQueue核心方法

三种类型的方法,针对非法添加或者得到队列元素做的处理方式不同又分为四组,可以针对不同的需求采用不同的方法.

不同组对阻塞进行了不同的处理

关于SynchonousQueue同步队列

SynchronousQueue没有容量。 与其他BlockingQueue不同,SynchronousQueue是一个不存储元素的BlockingQueue。 每一个put操作必须要等待一个take操作,否则不能继续添加元素,反之亦然。 即生产一个就要消费一个

demo

image.png

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么需要BlockingQueue
  • BlockingQueue种类👇(BlockingQueue是隶属于Collection下的BlockingQueue接口,于list,set平级)
  • BlockingQueue核心方法
  • 关于SynchonousQueue同步队列
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档