conCurrentLinkedQueue
2017-10-27 11:30
232 查看
第一步添加元素1。队列更新head节点的next节点为元素1节点。又因为tail节点默认情况下等于head节点,所以它们的next节点都指向元素1节点。
第二步添加元素2。队列首先设置元素1节点的next节点为元素2节点,然后更新tail节点指向元素2节点。
第三步添加元素3,设置tail节点的next节点为元素3节点。
第四步添加元素4,设置元素3的next节点为元素4节点,然后将tail节点指向元素4节点。
出队列的就是从队列里返回一个节点元素,并清空该节点对元素的引用。让我们通过每个节点出队的快照来观察下head节点的变化。
从上图可知,并不是每次出队时都更新head节点,当head节点里有元素时,直接弹出head节点里的元素,而不会更新head节点。只有当head节点里没有元素时,出队操作才会更新head节点。这种做法也是通过hops变量来减少使用CAS更新head节点的消耗,从而提高出队效率。让我们再通过源码来深入分析下出队过程。
相关文章推荐
- 聊聊并发(6)ConcurrentLinkedQueue的实现原理分析
- LinkedBlockingQueue 与ConcurrentLinkedQueue
- 使用zmq,probuf,缓冲池实现序列化和反序列化框架(一)-使用ConcurrentLinkedQueue实现缓冲池
- Java多线程系列--“JUC集合”10之 ConcurrentLinkedQueue
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
- java.util.concurrent.LinkedBlockingQueue
- JUC队列-ConcurrentLinkedQueue(四)
- JAVA多线程之——ConcurrentLinkedQueue
- ConcurrentLinkedQueue cas实现分析
- Java并发编程(七)ConcurrentLinkedQueue的实现原理和源码分析
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
- ConcurrentLinkedQueue
- ConcurrentLinkedQueue学习记
- ConcurrentLinkedQueue的实现原理分析
- Some questions about ConcurrentLinkedQueue
- ArrayBlockingQueue, LinkedBlockingQueue, ConcurrentLinkedQueue, RingBuffer
- 生产者与消费者的快速实现——并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
- 并发队列ConcurrentLinkedQueue、阻塞队列AraayBlockingQueue、阻塞队列LinkedBlockingQueue 区别 和 使用场景总结
- 聊聊并发(六)ConcurrentLinkedQueue的实现原理分析