简单总结:CAS

概念

一种乐观锁

 

思想

利用三个值——V(内存位置)、A(预期原值)、B(拟写入新值)。

若 V 中存储的不是A,则取消/重新尝试,否则,存入B。

且需要CPU从硬件层次上来使得CAS成为一个原子操作(Compare-and-Swap)

 

具体例子

如:AtomicInteger的自增实现,且通过自旋不断尝试。(JDK8是直接调用unsafe的方法)

 

缺点

ABA问题——需要使用AtomicStampedReference来解决

自旋造成一定的CPU开销

 

与synchronized比较

synchronized需要阻塞,导致进入内核态——CAS基于硬件,无需进入内核态

在synchronized改进后,两者效率在竞争少差别不大;竞争大时synchronized效率高,cas效率低

 

相关知识

悲观锁

AQS

锁优化技术

线程安全

Unsafe

 

参考资料:

Java并发问题--乐观锁与悲观锁以及乐观锁的一种实现方式-CAS <https://www.cnblogs.com/qjjazry/p/6581568.html>

 深入理解JAVA虚拟机

 

 


============================================================

  欢迎交流

============================================================

 

posted @ 2018-11-06 10:43  叶好  阅读(159)  评论(0)    收藏  举报