CAS和ABA问题

之前准备学习AQS,但是看了好几遍别人的讲解还是一知半解,所以暂时看点其他的。

CAS

CAS,之前也有看到过,不过没有深入的了解,后面阅读CAS的源码的时候注意到了这个东西。CAS:就是比较(C)然后(A)设值(S)。看到很多地方都说的交换,但我感觉就是单方面设值(可能是我没理解到,希望知道的人留言解惑,谢谢)。该方法通常有三个参数:

第一个参数是偏移值还是内存值来着,反正就是确定原值地址的。

第二个参数是期望值,用来和通过第一个参数找到的值进行比较。

第三个参数是设定值,比较结果如果相等,就认为没人改变他,就去修改成这个设定值。

CAS我的个人理解就是一个乐观轻量级锁,比较适合于读频率高于写频率的情景,concurrent包下面的锁都是依靠它实现的,与之对应的就是Synchronized(这个单词有点难记。。。每次都要去百度),作为一个重量级的锁,适合写入频率高的情形。

ABA

CAS在写入频率不高的情形下特别好用,但是存在着一个问题,就是如果进行A->B->A的修改无法被检查出来,因为A还是A,这就是ABA问题,为了解决这个问题,通常会在比较对象上加一个参数,修改该对象同时修改对应参数,检查的时候同时检查该参数有没有变化。AtomicStampedReference就是这样的实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值