BlockingQueue,是 java.util.concurrent 包提供的用于解决并发生产者 - 消费者问题的最有用的类,它的特性是在任意时刻只有一个线程可以进行take或者 put操作,并且BlockingQueue提供了超时return null的机制,在许多生产场景里都可以看到这个工具的身影。
队列类型
- 无限队列 (unbounded queue ) - 几乎可以无限增长。
- 有限队列 ( bounded queue ) - 定义了最大容量。
队列的数据结构
- 通常用链表或者数组实现
- 一般而言队列具备FIFO先进先出的特性,当然也有双端队列(Deque)优先级队列
常见的阻塞队列
- ArrayBlockingQueue:基于数组结构的有界阻塞队列(长度不可变)-- 数组+锁实现
- LinkedBlockingQueue:基于链表结构的有界阻塞队列(默认容量 Integer.MAX_VALUE)-- 链表+锁实现
- LinkedTransferQueue:基于链表结构的无界阻塞/传递队列;
- LinkedBlockingDeque:基于链表结构的有界阻塞双端队列(默认容量 Integer.MAX_VALUE);
- SynchronousQueue:不存储元素的阻塞/传递队列;
- PriorityBlockingQueue:支持优先级排序的无界阻塞队列 – 堆 + 锁
- DelayQueue:支持延时获取元素的无界阻塞队列 – PriorityQueue + 锁