BlockingQueue 阻塞队列

BlockingQueue阻塞队列

A Queue that additionally supports operations that wait for the queue to become non-empty when retrieving an element, and wait for space to become available in the queue when storing an element.

就是一种队列但是又在插入和取数据的时候支持了额外的等待阻塞。

关于无界队列和有界队列

队列的底层结构无非就是Array,或者是LinkedList。一般来说Array基本都是有界的,因为定义Array是有大小的,但是Array有的情况下会扩容。所以大小固定的Array是有界的。同理LinkedList也是只要初始化定义了一个大小,基本都可以认为是有界,当然如果大小是Integer.MaxValue这种数量级,也可以认为是无界【毕竟实际很难达到这种边界】。

ArrayBlockingQueue

一种基于数组的有界阻塞队列。支持FIFO,默认不是公平队列

LinkedBlockingQueue

官方的介绍叫An optionally-bounded blocking queue based on linked nodes.

就是说有无边界是可以选的。

PriorityBlockingQueue

官方介绍An unbounded blocking queue that uses the same ordering rules as class PriorityQueue and supplies blocking retrieval operations

这个队列是base on Array的无界队列,因为它会自动扩容。因为是Priority,所以是优先级高的先出队。

DelayQueue

DelayQueue 也是一个优先队列,不过它的优先级是和expire关联的,而且这个队列是基于数组的无界队列。而且进入队列的element必须是实现Delayed接口的。

SynchronousQueue

最难理解的就就是SynchronousQueue ,这个队列没有容量,所以每次入队必须匹配一次出队操作,否则就会阻塞;反之出队操作也必须匹配一个入队操作,否则也会阻塞。该队列使用CAS保证并发,在有的线程池类型中就使用了这种特殊的阻塞队列。

Tag

queue BlockingQueue

原文地址:https://www.cnblogs.com/dreamtaker/p/14703636.html