Skip to content

ConcurrentLinkedQueue:无界非阻塞队列

ConcurrentLinkedQueue 是什么

ConcurrentLinkedQueue 是基于 CAS 的无界非阻塞队列。

java
Queue<String> queue = new ConcurrentLinkedQueue<>();
queue.offer("a"); // 非阻塞添加
queue.poll();     // 非阻塞取出

无界 vs 有界

java
// 无界:永远不会满,可以一直添加
ConcurrentLinkedQueue<String> unbounded = new ConcurrentLinkedQueue<>();
unbounded.offer("item"); // 永远返回 true

// 有界:满了就拒绝或阻塞
BlockingQueue<String> bounded = new LinkedBlockingQueue<>(10);
bounded.offer("item"); // 队列满时返回 false
bounded.put("item");  // 队列满时阻塞等待

核心 API

入队

java
ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<>();

queue.offer("a"); // 非阻塞添加,成功返回 true
queue.add("b");   // 容量限制队列用,抛异常

出队

java
queue.poll();     // 非阻塞,取不到返回 null
queue.remove();   // 取不到抛异常
queue.peek();     // 非阻塞查看,不取出

vs BlockingQueue

特性ConcurrentLinkedQueueBlockingQueue
阻塞操作❌ 无✅ 有(put/take)
容量限制无界(Integer.MAX_VALUE)可有界
队列满时 offer返回 true返回 false 或阻塞
队列空时 poll返回 null返回 null 或阻塞

总结

要点说明
类型无界非阻塞队列
底层实现CAS(无锁)
适用场景高并发 FIFO 队列、任务分派

一句话:ConcurrentLinkedQueue 是无界非阻塞队列,用 CAS 实现高性能 FIFO。


相关链接

基于 VitePress 构建