ArrayBlockingQueue 阻塞队列
要指定容量,可以设置fair(等待最长的先处理),先block的先take。默认为非公平锁(new ReentrantLock(fair);)
为了避免出队移动,通过index来模拟环形结构。
Java 并发编程—ArrayBlockingQueue - 掘金
LinkedBlockingQueue阻塞队列
LinkedBlockingQueue和ArrayBlockingQueue区别
LinkedBlockingQueue有两个锁 (头尾采用两把锁,存取并行),ArrayBlockingQueue只有一个锁(锁全部),LinkedBlockingQueue效率高。
ConcurrentLinkedQueue 非阻塞队列
- 实现了无锁的 poll() 和 offer()【cas】
size() 是通过遍历 queue 来获得的, 在效率上是 O(n),可用isEmpty()
PriorityBlockingQueue:优先队列(阻塞队列)
SynchronousQueue:同步队列(阻塞队列)【当面交换】
LinkedTransferQueue:链表同步队列【当面交换中心,多个线程阻塞队列(每个节点都是一个阻塞线程)】
队列中永远只有一种类型的操作,要么是 put 类型, 要么是 take 类型.
**