| ArrayDeque |
不安全 |
数组 |
不允许 |
16 |
2 * old |
head 从数组的最大下标开始变小,tail 从 0 开始变大 |
| PriorityQueue |
不安全 |
平衡最小二叉堆 |
不允许 |
11 |
old < 64 则 2 * old; 否则 1.5 * old |
空穴, sift up,sift down |
| ConcurrentLinkedQueue |
安全 |
单链表 + CAS |
不允许 |
N/A |
N/A |
|
| ConcurrentLinkedDeque |
安全 |
双链表 + CAS |
不允许 |
N/A |
N/A |
|
| ArrayBlockingQueue |
安全 |
循环数组 |
不允许 |
N/A |
定长, 不可扩容 |
有 fair 选项; 2. 有一把公共的 ReentrantLock 与 notFull、notEmpty 两个 Condition 管理队列满或空时的阻塞状态
|
| LinkedBlockingQueue |
安全 |
单链表 |
不允许 |
N/A |
定长或无界 |
利用链表的特征,分离了 takeLock 与 putLock 两把锁,继续用 notEmpty、notFull 管理队列满或空时的阻塞状态 |
| LinkedBlockingDeque |
安全 |
双链表 |
不允许 |
N/A |
定长或无界 |
利用链表的特征,分离了 takeLock 与 putLock 两把锁,继续用 notEmpty、notFull 管理队列满或空时的阻塞状态 |
| PriorityBlockingQueue |
安全 |
平衡最小二叉堆 |
不允许 |
11 |
old < 64 则 2 * old; 否则 1.5 * old |
空穴, sift up,sift down |
| DelayQueue |
安全 |
PriorityQueue |
不允许 |
见 PriorityQueue |
见 PriorityQueue |
ScheduledThreadPoolExecutor 用了类似的结构 |
| SynchronousQueue |
安全 |
N/A |
不允许 |
1 |
N/A |
有 fair 选项 |
| LinkedTransferQueue |
安全 |
单链表 + CAS |
不允许 |
N/A |
N/A |
|