ConcurrentLinkedQueue简介 定义 源码分析 参考
ConcurrentLinkedQueue是一个基于链表的无界线程安全队列,非阻塞实现方式,先进先出,适合高并发的场景。
非阻塞的性能较好,采用CAS,避免加锁的时间,保证数据一致性。
采用“wait-free”算法实现。
(此部分源码看的比较吃力,很多不懂的地方,还有很多不知道的地方,希望不要误导读者,有好的文章之类的,希望能推荐下,谢谢)
ConcurrentLinkedQueue继承AbstractQueueConcurrentLinkedQueue链表节点Node的数据item是volatile类型的,next节点也是volatile类型的。
默认构造一个空的ConcurrentLinkedQueue,head=tail= new Node
源码分析
jdk1.7.0_71
add(E)方法
添加元素到队列尾部,实现是用offer,下面会说offer方法。
1 |
public boolean add(E e) { |
offer(E)方法
添加元素到队列尾部。
1 |
public boolean offer(E e) { |
poll()方法
删除并返回头部元素
1 |
public E poll() { |
peek()方法
返回队列头部的元素,跟poll方法类似
1 |
public E peek() { |
size()方法
需要遍历队列,不推荐使用,尽量使用isEmpty()
1 |
public int size() { |