七个阻塞队列

ArrayBlockingQueue

基于数组的有界阻塞队列

使用单锁

LinkedBlockingQueue

基于链表的有界阻塞队列

采用双锁机制,锁分离技术实现入队出队互不阻塞

LinkedBlockingDeque

基于双向链表的有界阻塞队列

使用单锁

可用于工作密取的场景

SynchronousQueue

不存储元素的阻塞队列,每个插入操作必须等待另一个线程执行相应的删除操作,反之亦然。队列没有任何内部容量。

公平模式使用dual queue算法-TransferQueue

非公平模式使用dual stack算法-TransferStack

适合传递性场景

LinkedTransferQueue:

基于链表的无界阻塞队列

基于松弛型dual queue算法

总之,结合了ConcurrentLinkedQueue松弛算法以及SynchronousQueue的dual queue算法

PriorityBlockingQueue

支持优先级排序的无界阻塞队列

扩容时使用allocationSpinLock简单的乐观锁,使得在分配新数组内存空间过程中,其他线程线程还可以使用数组,提高了并发性。

DelayQueue

无界阻塞优先队列,存储实现Delayed接口元素

实际存入PriorityQueue

使用Leader-Follower模式变体最小化不必要的定时等待

适合缓存系统与定时任务调度场景

你可能感兴趣的:(七个阻塞队列)