面试刷题21:java并发工具中的队列有哪些?
李福春 人气:0![image.png](https://img2020.cnblogs.com/other/268922/202003/268922-20200330183801141-1514127119.png)
java的线程池的工作队列用到了并发队列。
队列一般用在生产者消费者的场景中,处理需要排队的需求。
你好,我是李福春,今天的问题是:
ConcurrentLinkedQueue和LinkedBlockingQueue有什么区别?
答:都是java提供的并发安全队列,都提供了等待性的操作,take,put 区别如下:
![file](https://img2020.cnblogs.com/other/268922/202003/268922-20200330183801423-1584616840.jpg) # 并发队列类层级
层级图如下:
![image.png](https://img2020.cnblogs.com/other/268922/202003/268922-20200330183801602-1288283549.png)
# 生产者消费者例子 ```java package org.example.mianshi.queue; import java.util.Objects; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.stream.IntStream; /** * 作者: carter * 创建日期: 2020/3/30 17:39 * 描述: 生产者消费者例子 */ public class ConsumerProduceApp { public static void main(String[] args) { BlockingQueue
有界队列:
ArrayBlockingQueue: 容量固定,内存连续队列
LinkedBlockingQueue : 设置大小为有界队列,不设置则为无界队列
SychronousQueue: 容量为0, take,put操作互相等待
无界队列:
PriorityQueue: 优先级无界队列
DelayedQueue: 延迟无界队列
# 队列的选择
按照是否有界: 一般选择ArrayBlockingQueue , LinkedBlockingQueue
按照内存紧密性: ArrayBlockingQueue 按照吞吐量:LinkedBlockingQueue 线程接力或者队列信息较少的高性能: SynchronouseQueue
# 小结
本节机会大了ConcurrentBlockingQueue和LinkedBlockingQueue的区别,然后回顾了java提供的队列层级。
通过一个简单的生产者消费者例子展示了队列的基本使用。
最后介绍了不同场景下队列的选择。
![image.png](https://img2020.cnblogs.com/other/268922/202003/268922-20200330183802041-288000786.png) > 原创不易,转载请注明出处。
加载全部内容