`
xussen
  • 浏览: 29963 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ConcurrentLinkedQueue

阅读更多

成员:head tail

内部类:Node  item和next,Itr implements Iterator
add  offer   
利用UNSAFE.compareAndSwapObject(p, nextOffSet, null, newNode)(p表示遍历整个链表一直到next为null为止的Node)
如果设置成功,调用UNSAFE.compareAndSwapObject(this, tailOffSet, cmp, newNode),如果设置失败也没关系,因为说明在上一步到这一步之间有其他线程添入了新的节点并且重新设置了tail
总结:使用CAS原子指令来处理数据的并发访问。
可以容忍不一致,也就是说元素节点(Node)的增删和head,tail的引用可以不同步
做poll的时候,会从head开始遍历,如果当前head指向一个值为null的节点,继续遍历,直到有值的节点,然后将head引用该节点
1、这里的null值节点都是废弃的,在到达HOPS阀值之后就会被断开,断开之后自然会被垃圾回收器回收
做offer的时候,会判断tail是否有next,如果有,开始遍历,一直到next为null为止,将新的节点设置到该节点的next。然后将tail引用该节点
1、tail后面还有节点是因为tail滞后了,但在到达HOPS阀值之后就会重新设置tail的值
在遍历过程中,如果是遇到哨兵(next指向自己)节点,重新从head开始遍历

 

分享到:
评论

相关推荐

    ConcurrentLinkedQueue源码分析.rar

    ConcurrentLinkedQueue源码分析

    并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法

    并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法

    自己动手让springboot异步处理浏览器发送的请求(只需要使用ConcurrentLinkedQueue即可)

    自己动手让springboot异步处理浏览器发送的请求(只需要使用ConcurrentLinkedQueue即可)

    LinkedBlockingQueue 和 ConcurrentLinkedQueue的区别.docx

    LinkedBlockingQueue 首先 LinkedBlockingQueue 是一个 “可选且有界” 的阻塞队列实现,你可以根据需要指定队列的大小。 接下来,我将创建一个 LinkedBlockingQueue ,它最多可以包含100个元素: ...

    聊聊并发(6)ConcurrentLinkedQueue的

    聊聊并发(6)ConcurrentLinkedQueue的实现原理分析Java开发Java经验技巧共18页.pdf.zip

    Java 多线程与并发(15-26)-JUC集合- ConcurrentLinkedQueue详解.pdf

    Java 多线程与并发(15_26)-JUC集合_ ConcurrentLinkedQueue详解

    Java 线程 ? ConcurrentLinkedQueue

    ConcurrentLinkedQueue  在考虑并发的时候可以先考虑单线程的情况,然后再将并发的情况考虑进来。  比如ConcurrentLinkedQueue:  1、先考虑单线的offer  2、再考虑多线程时候的offer:  · 多个线程offer...

    Java concurrency集合之ConcurrentLinkedQueue_动力节点Java学院整理

    主要介绍了Java concurrency集合之ConcurrentLinkedQueue,需要的朋友可以参考下

    Android代码-MutilDialogManger

    随着项目的不断迭代,加上产品经理大法(这里加一个弹窗提示,...为了防止多个线程同时操作DialogManager中的queue对象,所以我们采用线程安全的ConcurrentLinkedQueue,这里简单的介绍下ConcurrentLinkedQueue实现和数

    Java 常见并发容器总结

    - **`ConcurrentLinkedQueue`** : 高效的并发队列,使用链表实现。可以看做一个线程安全的 `LinkedList`,这是一个非阻塞队列。 - **`BlockingQueue`** : 这是一个接口,JDK 内部通过链表、数组等方式实现了这个接口...

    java编发编程:JUC综合讲解

    JUC 提供了线程安全的并发集合类,如 ConcurrentHashMap、ConcurrentLinkedQueue 等。 3. 原子操作(Atomic Operations): 原子操作是不可再分割的基本操作,JUC 提供了一系列原子操作类,如 AtomicInteger、...

    Java并发编程相关源码集 包括多任务线程,线程池等.rar

    Java并发编程常见知识点源码集锦,涉及到对象锁,Executors多任务线程框架,线程池等... ConcurrentLinkedQueue、DelayQueue示例、自定义的线程拒绝策略、自定义线程池(使用有界队列)、自定义线程池(使用无界队列)。。。

    java高并发相关知识点.docx

    并发集合:Java中的并发集合,包括ConcurrentHashMap、ConcurrentLinkedQueue、CopyOnWriteArrayList等。 并发控制:Java中的并发控制机制,包括信号量、原子变量、倒计时等。 线程安全:Java中的线程安全,包括同步...

    聊聊并发系列文章

    6. 聊聊并发(六)ConcurrentLinkedQueue的实现原理 7. 聊聊并发(七)Java中的阻塞队列 8. 聊聊并发(八)Fork/Join框架介绍 9. 聊聊并发(九)Java中的CopyOnWrite容器 10. 聊聊并发(十)生产者消费者模式

    JUC多线程学习个人笔记

    并发集合:JUC提供了一些线程安全的集合类,如ConcurrentHashMap、ConcurrentLinkedQueue等,可以在多线程环境下安全地访问和修改集合。 原子操作:JUC提供了一些原子操作类,如AtomicInteger、AtomicLong等,可以...

    java并发编程综合讲解

    我们将详细介绍 JUC 提供的线程安全集合类,如 ConcurrentHashMap 和 ConcurrentLinkedQueue,以及它们在实际应用中的用法。 通过这份资源,您将获得全面的 Java 并发编程知识,从基础概念到高级应用,从工具使用到...

    Java容器.xmind

    ConcurrentLinkedQueue 标记: class Map 标记: 顶级接口 HashMap 标记: class V get​(Object key) V put​(K key, V value) Set<K> keySet​() Set,V>> entrySet​() 线程不安全,速度快,允许存放null键,...

    java并发包&线程池原理分析&锁的深度化

    并发包 同步容器类 Vector与ArrayList区别 ...在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队 列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。

    【2018最新最详细】并发多线程教程

    15.并发容器之ConcurrentLinkedQueue 16.并发容器之CopyOnWriteArrayList 17.并发容器之ThreadLocal 18.一篇文章,从源码深入详解ThreadLocal内存泄漏问题 19.并发容器之BlockingQueue 20.并发容器之...

Global site tag (gtag.js) - Google Analytics