第十四篇:ConcurrentLinkedQueue的源码解析(基于JDK1.8)

举报
码农飞哥 发表于 2021/05/29 12:14:52 2021/05/29
【摘要】 ConcurrentLinkedQueue的定义 ConcurrentLinkedQueue是 非阻塞的单端队列,其是一个通过链表实现的并发安全的队列。是java中并发环境下性能最好的队列,它是使用非阻塞算法(CAS)来实现线程安全的。它采用先进先出的规则对节点进行排序,当我们添加一个元素时,它会添加到队列的尾部;当我们获取一个元素时,它会返回队列头部的元素。 Co...

ConcurrentLinkedQueue的定义

ConcurrentLinkedQueue是 非阻塞的单端队列,其是一个通过链表实现的并发安全的队列。是java中并发环境下性能最好的队列,它是使用非阻塞算法(CAS)来实现线程安全的。它采用先进先出的规则对节点进行排序,当我们添加一个元素时,它会添加到队列的尾部;当我们获取一个元素时,它会返回队列头部的元素。

ConcurrentLinkerQueue 不变式

在后面的源码分析中,我们将会看到队列里有时会处于不一致状态,为此,ConcurrentLinkedQueue使用三个不变式(基本不变式,head的不变式和tail的不变式),来约束队列中方法的执行。通过这三个不变式来维护非阻塞算法的正确性。

基本不变式

在执行方法之前和之后,队列必须要保持的不变式;
当入队插入节点之后,队列中有一个next域为null的(最后)节点
从head开始遍历队列,可以访问所有item域不为null的节点。

head的不变式和可变式

不变式(invariants)
1.在执行方法之前和之后,head必须保持的不变式;
2. 所有"活着"的节点(只未删除节点)都能从head通过调用succ()方法遍历可达。
3.head不能为null。
可变式(Non-invariants)
1.he

文章来源: feige.blog.csdn.net,作者:码农飞哥,版权归原作者所有,如需转载,请联系作者。

原文链接:feige.blog.csdn.net/article/details/104321092

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。