栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java阻塞队列

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java阻塞队列

1. 常见阻塞队列

1)ArrayBlockingQueue:是一个基于数组结构的有界阻塞队列,此队列按照FIFO(先进先出)的原则对元素进行排序;

2)linkedBlockingQueue:一个基于链表结构的有界(大小默认值为Integer.MAX_VALUE)阻塞队列,此队列按照FIFO(先进先出)的原则对元素进行排序,吞吐量通常要高于ArrayBlockingQueue。

3)SynchronousQueue:一个不存储元素的阻塞队列,每个插入操作必须等到另外一个线程调用移除操作,否则插入操作一直处于阻塞状态。

4)PriorityBlockingQueue:支持优先级排序的无界阻塞队列。

5)DelayQueue:使用优先级队列实现的延迟无界阻塞队列。

6)linkedTransferQueue:由链表结构组成的无界阻塞队列

7)linkedBlockingDeque:由链表结构组成的双向阻塞队列

2. 阻塞队列优点

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

BlockingQueue的好处:不需要关心什么时候需要阻塞线程,什么时候需要唤醒线程,BlockingQueue的底层已经封装好了。

3. 阻塞队列的核心方法

方法类型抛出异常特殊值阻塞超时
插入add(e)offer(e)put()offer(e,time,unit)
移除remove()poll()take()poll(time,unit)
检查element()peek()不可用不可用
抛出异常当阻塞队列满时,再向队列中add添加元素会抛出IllegalStateException:Queue full;当阻塞队列空时,再向队列remove移除元素会抛出NoSuchElementException
特殊值插入方法,成功返回true,失败返回false移除方法,成功返回移出队列的元素,失败返回null
一直阻塞当阻塞队列满时,生产者线程继续往队列put元素,队列会一直阻塞生产者线程直到put数据或响应中断输出;当阻塞队列空时,消费者线程从队列take元素,队列会一直阻塞消费者线程直至队列中出现元素。
超时退出当阻塞队列满时,队列会阻塞生产者线程一段时间,超过时限之后生产者线程自动退出

4. 阻塞队列适用范围

1)生产者消费者

2)线程池

3)消息中间件

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/683447.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号