ConcurrentLinkedQueue 是基于链表的无锁线程安全队列,通过 CAS、volatile 和原子引用实现高并发低延迟;不支持 null,迭代器弱一致,size() 开销大,适用于日志、消息缓冲等写密集场景。

ConcurrentLinkedQueue 是 Java 并发包(java.util.concurrent)中提供的一个基于链表结构的无锁(lock-free)线程安全队列,适用于高并发、低延迟场景。它不依赖 synchronized 或 ReentrantLock,而是通过 CAS(Compare-and-Swap)原子操作实现线程安全,避免了锁竞争带来的性能损耗和上下文切换开销。
核心原理:无锁 + CAS + volatile + 原子引用
ConcurrentLinkedQueue 内部使用单向链表节点(Node),每个节点包含 item 和 next 两个 volatile 字段。入队(offer)和出队(poll)均通过循环 + CAS 实现:
- offer 操作:从 tail 开始尝试 CAS 插入新节点;若失败(tail 已被其他线程更新),则先跳转到最新 tail 再重试;必要时还会推进 tail 指针(“松弛”更新,提升吞吐)。
- poll 操作:从 head 开始,先读取 head.next,再 CAS 更新 head 指向新节点;若 next 为空(队列空),返回 null;若 head.item 已被其他线程取走(置为 null),则跳过该节点继续向前找。
- 所有关键字段(如 head/tail 引用、next/item)均为 volatile,保证可见性;CAS 操作由 Unsafe 类提供,确保修改的原子性。
典型使用方式与注意事项
直接创建并使用即可,无需额外同步:
Queue但需注意以下实践要点:
将后端 Java 接口文档转换为前端 TypeScript 类型定义(interface / type)。输入:飞书文档、Spring Boot 接口文档、Swagger/OpenAPI、手写 API 文档等。输出:包含请求参数与响应结果的 .md 文件,含完整 JSDoc 注释。触发关键词:Java 转 TS、接口转换、生成前端类型、接口文档转 TypeScript、DTO/VO/BO 转 interface、后端文档转前端类型、生成接口类型、类型定义生成。
- 不支持 null 元素:插入 null 会抛出 NullPointerException,务必在 offer 前校验。
- 弱一致性迭代器:iterator() 返回的迭代器不保证强一致性——遍历时可能看不到部分已入队元素,也可能重复看到某些元素;不能用于精确状态快照或事务性遍历。
- size() 方法代价较高:需遍历整个链表计数,且结果可能瞬间过期;高并发下应避免频繁调用 size() 判断是否为空,优先用 isEmpty()(仅检查 head == tail 或 head.next == null)。
- peek() 和 poll() 都是非阻塞的:队列空时立即返回 null,适合“有则处理、无则跳过”的场景;如需阻塞等待,应选用 BlockingQueue 实现(如 LinkedBlockingQueue)。
适用场景与性能优势
适合以下典型高并发、低延迟需求:
- 日志采集系统中多线程写入日志事件,后台单线程批量刷盘;
- 消息中间件的生产端缓冲队列,要求极低延迟和高吞吐;
- 异步任务分发器(如线程池前的缓冲队列),避免 submit 调用因锁阻塞;
- 监控指标聚合:大量传感器线程快速上报指标,汇总线程周期性拉取聚合。
相比 ArrayBlockingQueue 或 LinkedBlockingQueue,在纯生产者-消费者吞吐测试中,ConcurrentLinkedQueue 在 16+ 线程下常表现出 2–5 倍吞吐提升,尤其在写密集型场景下优势更明显。
常见误区与替代建议
不是所有“线程安全队列”都适合你的场景:
- 不要用它做“有界队列”:ConcurrentLinkedQueue 是无界的,OOM 风险需靠上游限流(如信号量或背压策略)控制;若需容量限制,考虑 LinkedBlockingQueue(可设 capacity)或自研带 CAS 限流的变体。
- 不保证 FIFO 的绝对实时性:由于 tail 松弛更新和多线程竞争,刚入队的元素可能短暂不可见;对顺序极其敏感的业务(如金融指令序列),需额外加序号或时间戳校验。
- 替代方案参考:JCTools 库中的 MpscUnboundedXaddArrayQueue(单生产者多消费者、更高吞吐)、LMAX Disruptor(环形缓冲、极致低延迟但复杂度高)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










