java CAS机制

CAS:Compare And Swap,比较并替换。Synchronized属于悲观锁,CAS属于乐观锁。

原理:使用内存地址V、旧的预期值A、要修改的新值B三个基本操作数,要更新一个变量时,只有当变量的预期值A和内存地址V当中的实际值相同时,才会将地址V对应的值修改为B。

使用场景:java中的Atomic系列类、Lock系列类的底层实现;java1.6以上版本,Synchronized转变为重量级之前,也会采用CAS。

缺点:1、CPU开销大:高并发时,许多线程反复尝试更新一个变量,却一直更新不成功,循环往复,cpu开销大

    2、CAS只能保证一个变量的原子性,无法保证一个代码块或多个变量的原子性

    3、ABA问题,解决办法是除了比较预期值和内存地址的实际值是否相同,还要加个版本号的比较,java中的AtomicStampedReference类实现了用版本号比较的CAS机制。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值