从类名上我们就可以看得出来,Concurrent保证了并发中的线程安全,Linked提示是链表实现,Queue则说明是一个队列。
从类的声明上也验证了这点:
1
2
|
public
class
ConcurrentLinkedQueue<E>
extends
AbstractQueue<E>
implements
Queue<E>, java.io.Serializable
|
ConcurrentLinkedQueue这个类实现的是一个无界的,保证了先进先出的队列,队列元素中不可以放置null元素(内部实现的特殊节点除外)。
另外,我们需要注意的是ConcurrentLinkedQueue锁保持的只是特定场景下的一个“快照”,不能“精确”地维护队列当前情况下的“真相”。下面详细解释这句说明。
1. add() 和 offer() 源码粗略分析
两者实际上是一回事,因为add()直接调用了offer()方法。源码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|