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
抛出异常
返回特殊值
一直阻塞
超时退出
7.4 SynchronousQueue
7.4.1 同步队列
SynchronousQueue是BlockingQueue的实现类。SynchronousQueue 没有容量,与其他的 BlockingQueue 不同,SynchronousQueue是一个不存储元素的 BlockingQueue ,每一个put操作必须要等待一个take操作,否则不能继续添加元素。
7.4.2 代码示例
执行结果

版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/cjjbc/34735.html