七个阻塞队列

ArrayBlockingQueue

基于数组的有界阻塞队列

使用单锁

LinkedBlockingQueue

基于链表的有界阻塞队列

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

LinkedBlockingDeque

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

使用单锁

可用于工作密取的场景

SynchronousQueue

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

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

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

适合传递性场景

LinkedTransferQueue:

基于链表的无界阻塞队列

基于松弛型dual queue算法

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

PriorityBlockingQueue

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

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

DelayQueue

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

实际存入PriorityQueue

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在并发编程中,有时候需要使用线程安全的队列。如果要实现一个线程安全的队列有两种方式:一种是使用阻塞算法,另一种是使...
    科大醉侠阅读 12,134评论 2 2
  • layout: posttitle: 《Java并发编程的艺术》笔记categories: Javaexcerpt...
    xiaogmail阅读 11,117评论 1 19
  • Java平台类库包含了丰富的并发基础构建模块,例如线程安全的容器类以及各种用于协调多个相互协作的线程控制流的同步工...
    Steven1997阅读 3,587评论 0 0
  • 生命是什么呢?生命是世事无常吧。我路过很多人,走过很多路,看过风景,留下种子,挥一挥手,不忍远离。未曾谋面的人儿,...
    木子000阅读 734评论 0 0
  • 一、情绪情感对学前儿童的作用。 1、情绪的动机作用。 情绪是儿童认知和行为的唤起者与组织者,对儿童心理活动和行为具...
    路远M阅读 4,542评论 0 0