Java并发之CAS

什么是CAS?

  CAS(Compare and Swap)比较并交换,一种乐观锁机制,是CPU级别的指令,能够保证操作的原子性,是Java并发包的基础。JDK在sun.misc包下Unsafe的类里提供了CAS相关的方法。

CAS实现原理

  基于cmpxchg汇编指令实现。

CAS优缺点

优点
  1. 高效:硬件级别的原子操作,性能高;
  2. 保证操作的原子性;
缺点
  1. 不适用于高并发场景。CAS本质是乐观锁,在高并发场景,CAS操作失败的概率增加,极大的增加CPU开销;
  2. ABA问题。CAS在操作值的时候检查值是否已经变化,没有变化的情况下才会进行更新。但是如果一个值原来是A,变成B,又变成A,那么CAS进行检查时会认为这个值没有变化,但是实际上却变化了。ABA问题的解决方法是使用版本号。在变量前面追加上版本号,每次变量更新的时候把版本号加一,那么A-B-A 就变成1A-2B-3A。从Java1.5开始JDK的atomic包里提供了一个类AtomicStampedReference来解决ABA问题。

参考:

  1. http://www.mayou18.com/detail/Kja11XHc.html
  2. https://juejin.im/post/5a803e61f265da4e914b5b63
  3. http://cmsblogs.com/?p=2235
  4. https://www.jianshu.com/p/fb6e91b013cc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值