并发编程之ConcurrentLinkedQueue原理

2021-03-18 21:29:15 浏览数 (1)

概述

Java 提供的线程安全的 Queue 可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是 BlockingQueue,非阻塞队列的典型例子是 ConcurrentLinkedQueue,在实际应用中要根据实际需要选用阻塞队列或者非阻塞队列。阻塞队列可以通过加锁来实现,非阻塞队列可以通过 CAS 操作实现。

从名字可以看出,ConcurrentLinkedQueue这个队列使用链表作为其数据结构.ConcurrentLinkedQueue 应该算是在高并发环境中性能最好的队列了。它之所有能有很好的性能,是因为其内部复杂的实现。

ConcurrentLinkedQueue 适合在对性能要求相对较高,同时对队列的读写存在多个线程同时进行的场景,即如果对队列加锁的成本较高则适合使用无锁的 ConcurrentLinkedQueue 来替代。

ConcurrentLinkedQueue类图

执行原理

入队示意图

假设往ConcurrentLinkedQueue中添加A,B, C三个元素。

初始化

初始化

添加元素A

添加元素A示意图

添加元素B

添加元素B示意图

添加元素C

添加元素C示意图

0 人点赞