1. java.util
1)PriorityQueue
关键词:无界、非阻塞、非线程安全
- 无界
内部存储采用 Object[],且未由 final 关键字修饰
- 非阻塞
无任何锁机制保障
2)PriorityBlockingQueue
关键词:无界、阻塞、线程安全
- 无界
内部存储采用 Object[],且未由 final 关键字修饰
- 非阻塞
整个队列共用同一把锁
2. java.util.concurrent
1)ArrayBlockingQueue
关键词:固定长度、阻塞
- 固定长度
队列在初始化时需指定长度,并在操作过程中不允许被改变
内部存储采用 Object[],并由 final 关键字修饰
- 阻塞
当队列为空时,“取”的操作会被 block
当队列已满时,“插”的操作会 block
整个队列共用同一把锁
2)ConcurrentLinkedQueue
关键词:无界、非阻塞
- 无界
内部存储采用 List<Node>(链表)
- 非阻塞
因为无界,所以非阻塞
但是,多线程间存在“竞争”时,需等待
3)DelayQueue
关键词:无界、阻塞
- 无界
内部存储采用 PriorityQueue
- 阻塞
当队列中的 delay 时间未到或队列为空时,“取”的操作会被 block
整个队列共用同一把锁
4)LinkedBlockingQueue
5)LinkedTransferQueue
6)PriorityBlockingQueue
关键词:无界、阻塞
- 无界
逻辑上的无界(内存是有限的)
内部存储采用 Object[]
- 阻塞
整个队列共用同一把锁
7)SynchronousQueue
生产者执行“插”操作,须等待消费者执行“取”操作,若消费者未执行“取”操作,生产者等待;反之,亦然
8)ConcurrentLinkedDeque
关键词:双端、非阻塞
- 双端
队头和队尾均能执行入队和出队操作
队头 - 调用 push 方法
队尾 - 调用 add 方法
- 非阻塞
CAS