CAS的原理

作为多线程的基石之一,作为java.util.concurrent.*的底层方法之一,理解CAS是十分重要的。

首先,CAS,即是compare and swap,是一种乐观锁。顾名思义,其核心思想在于:现在有三个操作数:内存值A,旧的预期值a,新的值B。
1.compare:比较A与a是否相等;
如果不等,说明被更改过,则不更新,返回false表示修改失败;
如果相等,则到第2步;
2.swap:更新A的值为B。

但是这会出现经典的ABA问题,即对于内存值A来说,你在compare的时候,a->b->a,由于最后变回了A,在检查的时候以为没变过(实际上被改过了)。

为了解决这个问题,JDK1.5引入AtomicStampedReference,其核心思想是每次修改都伴随版本号的变更。核心代码如下,其中Stamp即是版本号:

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容