Java阻塞队列

Java阻塞队列,第1张

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)消息中间件

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5684006.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存