随笔-CAS

1.名称

Campare and swap(switch)

2.作用

保证单个变量操作的原子性

3.对比synchronized关键字

3.1 synchronized是悲观锁;当并发量很少的时候效率很低;当并发量很高的时候效率不错

3.2 CAS是乐观锁;当并发量很少的时候效率不错;当并发量很高的时候就会因为大量的自旋操作而占用cpu

4.CAS具体操作

首先该操作有三个操作数:地址,目标结果,期待结果。

当目标结果和期待结果不一样的时候会进行自旋操作。

在对变量执行操作的时候底层应该是调用了Safe类里面的pake,unpake进行加锁。

5.CAS上下文

上层应该是Lock类,各个原子类

下层应该是Safe类

6.缺点

1.CPU开销较大

在并发量比较高的情况下,如果许多线程反复尝试更新某一个变量,却又一直更新不成功,循环往复,会给CPU带来很大的压力。

 

 

2.不能保证代码块的原子性

CAS机制所保证的只是一个变量的原子性操作,而不能保证整个代码块的原子性。比如需要保证3个变量共同进行原子性的更新,就不得不使用Synchronized了。

 

 

3.ABA问题

这是CAS机制最大的问题所在。

什么是ABA问题?怎么解决?我们下一期来详细介绍。

 

咳咳,ABA问题就是三个线程同时执行

线程A 100——>99

线程B 100——>99

线程C 99——>100

理论上只有线程AC执行成功了;

但结果是AC都执行成功后,B也执行成功了。

解决办法:

AtomicStampedReference,给地址V添加一个版本号的信息

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值