当前位置:网站首页 > C++编程 > 正文

juc阻塞队列(阻塞队列实现原理)



7.1 基本概念

队列(queue) :是只允许在一端(头部: front)进行插入操作,而在另一端==(尾部:rear)==进行删除操作的线性表。

特点:队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端称为对头

7.2 BlockingQueue

阻塞:必须要阻塞、不得不阻塞

阻塞队列是一个队列,在数据结构中起的作用如下图



  • 当队列是空的,从队列中获取元素的操作将会被阻塞。
  • 当队列是满的,从队列中添加元素的操作将会被阻塞。
  • 试图从空的队列中获取元素的线程将会被阻塞,直到其他线程往空的队列插入新的元素。
  • 试图向已满的队列中添加新元素的线程将会被阻塞,直到其他线程从队列中移除一个或多个元素或者完全清空,使队列变得空闲起来并后续新增。
7.2.1 阻塞队列的用处

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

好处是不需要关心什么时候需要阻塞线程,什么时候需要唤醒线程,因为这一切BlockingQueue 都可以处理好。

7.3 接口架构

7.3.1 接口架构图
  • ArrayBlockingQueue:由数组结构组成的有界阻塞队列。
  • LinkedBlockingQueue:由链表结构组成的有界(默认值为:integer.MAX_VALUE)阻塞队列。
7.3.2 常用API
方法处理方法 抛出异常 返回特殊值 一直阻塞 超时退出 插入方法 add(e) offer(e) put(e) offer(e, time, unit) 移除方法 remove( ) poll( ) take( ) poll(time, unit) 检查方法 element( ) peek( ) 不可用 不可用

抛出异常

 

返回特殊值

 

一直阻塞

 

超时退出

 

7.4 SynchronousQueue

7.4.1 同步队列

SynchronousQueue是BlockingQueue的实现类。SynchronousQueue 没有容量,与其他的 BlockingQueue 不同,SynchronousQueue是一个不存储元素的 BlockingQueue ,每一个put操作必须要等待一个take操作,否则不能继续添加元素。

7.4.2 代码示例
 

执行结果

到此这篇juc阻塞队列(阻塞队列实现原理)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • conda删除虚拟环境命令(conda 虚拟环境)2026-02-16 23:00:10
  • dssclient怎么读(sddicted怎么读)2026-02-16 23:00:10
  • ad20原理图怎么生成元件库(ad20原理图怎么生成pcb)2026-02-16 23:00:10
  • ofnp是什么材料(ofhc是什么材料)2026-02-16 23:00:10
  • ad20原理图怎么生成pcb步骤(ad从原理图生成pcb步骤)2026-02-16 23:00:10
  • ssh免密登录配置sshd_config(ssh免密登录配置过程)2026-02-16 23:00:10
  • cp1300色带能用多久(cp1300色带卡住怎么拿出来)2026-02-16 23:00:10
  • git clone git(git clone git@命令)2026-02-16 23:00:10
  • msvcp140(msvcp140.dll是什么文件)2026-02-16 23:00:10
  • 合并数组并去重(合并数组 leetcode)2026-02-16 23:00:10
  • 全屏图片