ArrayBlockingQueue
基于数组的有界阻塞队列
使用单锁
LinkedBlockingQueue
基于链表的有界阻塞队列
采用双锁机制,锁分离技术实现入队出队互不阻塞
LinkedBlockingDeque
基于双向链表的有界阻塞队列
使用单锁
可用于工作密取的场景
SynchronousQueue
不存储元素的阻塞队列,每个插入操作必须等待另一个线程执行相应的删除操作,反之亦然。队列没有任何内部容量。
公平模式使用dual queue算法-TransferQueue
非公平模式使用dual stack算法-TransferStack
适合传递性场景
LinkedTransferQueue:
基于链表的无界阻塞队列
基于松弛型dual queue算法
总之,结合了ConcurrentLinkedQueue松弛算法以及SynchronousQueue的dual queue算法
PriorityBlockingQueue
支持优先级排序的无界阻塞队列
扩容时使用allocationSpinLock简单的乐观锁,使得在分配新数组内存空间过程中,其他线程线程还可以使用数组,提高了并发性。
DelayQueue
无界阻塞优先队列,存储实现Delayed接口元素
实际存入PriorityQueue
使用Leader-Follower模式变体最小化不必要的定时等待
适合缓存系统与定时任务调度场景