一、java中的队列

Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构

Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接口

1.阻塞队列

阻塞队列可以阻塞,当阻塞队列当队列里面没有值时,会阻塞直到有值输入。输入也一样,当队列满的时候,会阻塞,直到队列有空间。

阻塞队列

ArrayBlockingQueue :一个由数组支持的有界队列。

LinkedBlockingQueue :一个由链接节点支持的可选有界队列。

PriorityBlockingQueue :一个由优先级堆支持的无界优先级队列。

DelayQueue :一个由优先级堆支持的、基于时间的调度队列。

SynchronousQueue :一个利用 BlockingQueue 接口的简单聚集(rendezvous)机制。

2.非阻塞队列

1. LinkedList

LinkedList 除了实现的 List 接口,也实现了 Deque 接口,可以当做双端队列来使用。

2. PriorityQueue

PriorityQueue 类实质上维护了一个有序列表。加入到 Queue 中的元素根据它们的天然排序(通过其 java.util.Comparable 实现)或者根据传递给构造函数的 java.util.Comparator 实现来定位。该队列不允许使用 null 元素也不允许插入不可比较的对象

PriorityQueue 队列的头指排序规则最小那个元素。如果多个元素都是最小值则随机选一个。

PriorityQueue 是一个无界队列,但是初始的容量(实际是一个Object[]),随着不断向优先级队列添加元素,其容量会自动扩容,无需指定容量增加策略的细节。

3. ConcurrentLinkedQueue

ConcurrentLinkedQueue 是基于链接节点的、线程安全的队列(CAS)。并发访问不需要同步。因为它在队列的尾部添加元素并从头部删除它们,所以只要不需要知道队列的大小,ConcurrentLinkedQueue 对公共集合的共享访问就可以工作得很好。收集关于队列大小的信息会很慢,需要遍历队列。

同样此队列不允许使用null元素,

更多推荐