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
| 特性 | ConcurrentLinkedQueue | BlockingQueue |
|---|---|---|
| 阻塞操作 | ❌ 无 | ✅ 有(put/take) |
| 容量限制 | 无界(Integer.MAX_VALUE) | 可有界 |
| 队列满时 offer | 返回 true | 返回 false 或阻塞 |
| 队列空时 poll | 返回 null | 返回 null 或阻塞 |
总结
| 要点 | 说明 |
|---|---|
| 类型 | 无界非阻塞队列 |
| 底层实现 | CAS(无锁) |
| 适用场景 | 高并发 FIFO 队列、任务分派 |
一句话:ConcurrentLinkedQueue 是无界非阻塞队列,用 CAS 实现高性能 FIFO。
