`
xussen
  • 浏览: 31479 次
  • 性别: 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》 在Java并发编程领域,`ConcurrentLinkedQueue`是一个非常重要的数据结构,它是线程安全的无界队列,基于链接节点实现,性能高效。本篇文章将深入探讨`...

    LinkedBlockingQueue 和 ConcurrentLinkedQueue的区别.docx

    《LinkedBlockingQueue与ConcurrentLinkedQueue的比较与应用》 在Java并发编程中,队列是一种重要的数据结构,尤其在多线程环境下的任务调度和数据传递中扮演着关键角色。LinkedBlockingQueue和...

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

    ### 并发队列 ConcurrentLinkedQueue 和阻塞队列 LinkedBlockingQueue 用法详解 #### 一、并发队列 ConcurrentLinkedQueue 概述 `ConcurrentLinkedQueue` 是 Java 并发包 `java.util.concurrent` 提供的一个高性能...

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

    本文将详细介绍如何使用Java中的`ConcurrentLinkedQueue`数据结构,结合Spring Boot的特性,实现异步处理浏览器发送的请求。 首先,`ConcurrentLinkedQueue`是Java并发包`java.util.concurrent`中的一个无界线程...

    聊聊并发(6)ConcurrentLinkedQueue的

    【标题】:“聊聊并发(6)ConcurrentLinkedQueue的实现原理分析” 【正文】: 并发编程是现代软件开发中的重要组成部分,特别是在多核处理器和分布式系统中,有效地处理并发能够显著提升系统的性能和响应能力。...

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

    ### Java多线程与并发(15-26)-JUC集合-ConcurrentLinkedQueue详解 #### 一、ConcurrentLinkedQueue概述 `ConcurrentLinkedQueue`是Java实用工具包(J.U.C)中的一个高性能线程安全队列,主要用于解决多线程环境下...

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

    【Java并发集合与ConcurrentLinkedQueue详解】 在Java并发编程中,集合类的线程安全性是至关重要的。本文将深入探讨Java并发集合中的ConcurrentLinkedQueue,这是一个无界线程安全队列,特别适合处理高并发场景。 ...

    Java 线程 ? ConcurrentLinkedQueue

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

    线程安全的jdbc连接池

    在这个简单的实现中,我们利用了`ConcurrentLinkedQueue`数据结构来确保多线程环境下的安全性和效率。 首先,让我们了解什么是JDBC连接池。JDBC连接池(Java Database Connectivity Connection Pool)是数据库资源...

    Android代码-MutilDialogManger

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

    Android eventbus

    private final ConcurrentLinkedQueue<Object> eventQueue = new ConcurrentLinkedQueue(); private ConcurrentHashMap, ConcurrentLinkedQueue<Subscriber>> subscribersMap = new ConcurrentHashMap(); public...

    实战Concurrent-BlockQueue

    本文将深入探讨`ConcurrentLinkedQueue`、`ArrayBlockingQueue`以及`LinkedBlockingQueue`这三种实现,并分析它们的设计原理与应用场景。 首先,我们来看`ConcurrentLinkedQueue`。它是基于非阻塞算法(CAS,...

    使用-Java-构造高可扩展应用

    使用 Java 构造高可扩展应用需要遵循一些简单规则和工具,例如使用 LockFreeQueue 替换标准库中的 ConcurrentLinkedQueue,检测锁的使用和冲突,等等。本文提供了一些实用的经验和建议,帮助开发人员提高 Java 多...

    concurrent-1.3.4.jar

    并发控制:concurrent包提供了一些线程安全的集合类,如ConcurrentHashMap、ConcurrentLinkedQueue等,可以在多线程环境下安全地对集合进行操作,而无需手动添加同步机制。 原子操作:concurrent包提供了一些原子...

    Java 常见并发容器总结

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

    并发容器和线程池,java并发编程3

    `ConcurrentLinkedQueue`是一个基于链接节点的无界线程安全队列,它遵循先进先出(FIFO)原则。队列的插入操作发生在队列的尾部,而删除操作发生在队列的头部。 **特点**: - **无界队列**:理论上可以无限存储元素,...

    无锁队列

    在Java中,一个著名的无锁队列实现是`ConcurrentLinkedQueue`,它是Java并发包`java.util.concurrent`的一部分。这个队列基于循环队列的设计,利用了链表节点的CAS操作来实现元素的插入和移除。在`...

    Java数据结构实现之Queue.zip

    4. **ConcurrentLinkedQueue**:`java.util.concurrent.ConcurrentLinkedQueue` 是一个线程安全的无界队列,基于链接节点的非阻塞算法实现。它在多线程环境下表现出色,插入和删除操作的时间复杂度均为O(1)。 5. **...

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

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

Global site tag (gtag.js) - Google Analytics