详细介绍CAS机制

CAS其实就是乐观锁的一种实现方式,其优点就是不需要加锁就能进行原子操作,而悲观锁比较典型的就是Java中的synchronized

CAS全称compare and swap——比较并替换

它是并发条件下修改数据的一种机制,包含三个操作数:
需要修改的数据的内存地址(V);
对这个数据的旧预期值(A);
需要将它修改为的值(B);

CAS的操作步骤如下:

1.修改前记录数据的内存地址V;
2.读取数据的当前的值,记录为A;
3.修改数据的值变为B;
4.查看地址V下的值是否仍然为A,若为A,则用B替换它;若地址V下的值不为A,表示在自己修改的过程中,其他的线程对数据进行了修改,则不更新变量的值,而是重新从步骤2开始执行,这被称为自旋;

通过以上四个步骤对内存中的数据进行修改,就可以保证数据修改的原子性。

Java并不能像C或C++一样,直接操作内存,但是JVM为我们提供了一个后门,就是sun.misc.Unsafe类,这个类为我们实现了很多硬件级别的原子方法,当然,这些方法都是native方法,使用其他语言实现,而不是Java方法。

unsafe.compareAndSwapInt(this, valueOffset, expect, update)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值