请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

CAS compare and swap 比较并交换

[复制链接]
查看: 13|回复: 0

2万

主题

2万

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
74897
发表于 2020-9-15 22:04 | 显示全部楼层 |阅读模式
  1. public class CASDemo {    public static void main(String[] args){        AtomicInteger atomicInteger = new AtomicInteger(5);        System.out.println(atomicInteger.compareAndSet(5,2019)+"\t current data: "+atomicInteger.get());        System.out.println(atomicInteger.compareAndSet(5,1024)+"\t current data: "+atomicInteger.get());    }}
复制代码

CAS的底层源码:
我的关键词 CAS compare and swap 比较并交换  新闻咨询 1350805-20200421151328773-1193236554


  • this;当前对象
  • valueOffset: 内存地址
  • expect:期待值
  • update:更新值
我的关键词 CAS compare and swap 比较并交换  新闻咨询 1350805-20200421152013648-2024634205

  1. [b]Unsafe类:[/b]
复制代码
  1. 是CAS的核心类,由于Java方法无法直接访问底层操作系统,需要通过本地方法来访问。Unsafe类相当于一个后门,基于该类可以直接操作特定内存的数据。Unsafe类在sun.misc包中,其内部方法操作可以像C的指针一样直接操作内存  
  2. Unsafe类中的所有方法都是native修饰的(不对啊,很多方法明明没加native)  
  3. CAS并发原语体现在Java中就是Unsafe类中的各个方法。调用Unsafe类中的CAS方法,JVM会帮我们是先出CAS汇编指令。
  4. 这是一种完全依赖于硬件的功能,通过它实现了[b][i]原子[/i][/b]操作。
  5. 原语属于操作系统用语范畴,是由若干条指令组成的,用于完成某个功能的一个剁成,并且原语的执行必须是连续的,在执行过程中不允许被中断,也就是说CAS是一条CPU的原子指令,不会造成的数据不一致问题。
  6. CAS的实现核心:
复制代码

  • 自旋
  • unsafe类与内存值作比较。
  1. [/code][code][b]Unsafe类的getAndAddInt()源码[/b]
复制代码
我的关键词 CAS compare and swap 比较并交换  新闻咨询 1350805-20200421152536377-830724360




  • 参数列表:

  • - var1 AtomicInteger本身
  • - var2 变量var1的内存地址
  • - var3
  • - var4 值修改的量,比如加1的这个1
  • - var5 通过内存地址找出的当前时间保存在这个位置上的值


  • 方法执行过程:
  • 取出地址上的值var5,并与var1比较(我感觉应该是var5和var2地址上的值比较,如果是var5和var1比较不久死循环了吗)
  • 如果一致,说明没有被修改(这里先不考虑ABA问题)。就可以将var4+var5的值写到这个地址上,compareAndSwapInt()方法返回true,结束do-while循环
  • 如果不一致,就继续执行do-while循环,这个循环称为自旋
  • 问题:如果不一致,在这个方法里不是死循环了?
  • 回答:不会,因为do-while的方法体里会读取一次var5,不可能一直死循环

    为什么用CAS而不用synchronized
   synchronized加锁,一致性得到保障,但是并发性下降,CAS既保证了一致性又保证了并发性
   CAS的缺点
- 比较失败会一直尝试,如果长时间不成功,可能会给CPU带来很大的开销  
- 只能保证一个共享变量的原子性,注意是一个。多个变量时就不能保证原子性了
- ABA问题


































免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表