并发队列

ConcurrentLinkedQuere 总结
ConcurrentLinkedQueue 使用CAS 非阻塞算法实现使用CAS 解决了当前节点与next 节点之间的安全链接和对
当前节点值的赋值。由于使用CAS 没有使用锁,所以获取size 的时候有可能进行offer,poll 或者remove 操作,导
致获取的元素个数不精确,所以在并发情况下size 函数不是很有用。另外第一次peek 或者first 时候会把head 指向
第一个真正的队列元素。
下面总结下如何实现线程安全的,可知入队出队函数都是操作volatile 变量:head,tail。所以要保证队列线程安
全只需要保证对这两个Node 操作的可见性和原子性,由于volatile 本身保证可见性,所以只需要看下多线程下如果
保证对着两个变量操作的原子性。
对于offer 操作是在tail 后面添加元素,也就是调用tail.casNext 方法,而这个方法是使用的CAS 操作,只有一
个线程会成功,然后失败的线程会循环一下,重新获取tail,然后执行casNext 方法。对于poll 也是这样的。

原文地址:https://www.cnblogs.com/zhz-8919/p/10832071.html