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