CAS 乐观锁和ABA问题

CAS====》Compare-And-Swap

如果主物理内存的值跟线程期望值一样,就修改为我的更新值,不一样,就失败,需要重新获取主物理内存的值
在这里插入图片描述
在这里插入图片描述
底层基于usafe,而这个类是rt.jar包sun.misc.unsafe原生类,靠的里面cpu原语保证原子性,工作思想还是靠的cas,比较和交换
CAS的缺点:
1.循环时间长开销大
2.只能保证一个共享变量的原子操作
3.会产生ABA问题

“ABA问题”
简称狸猫换太子

CAS算法实现一个重要前提需要取出内存中某时刻的数据并在当下时刻比较并替换,那么在这个时间差内会导致数据的变化。比如说一个线程one从内存位置V中取出A,这时候另一个线程two也从内存中取出A,并且线程two进行了一些操作将值变成了B,然后线程two又将V位置的数据变成A,这时候线程one进行CAS操作发现内存中仍然是A,然后线程one操作成功。
尽管线程one的CAS操作成功,但是不代表这个过程就是没有问题的

模拟ABA问题
原子引用更新AtomicReference<> 自定义原子
在这里插入图片描述
在这里插入图片描述
ABA解决
AtomicStampedReference<> 原子引用带上版本号
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值