<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <h4>7.1 基本概念</h4>
讯享网
队列(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 代码示例
讯享网
执行结果

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