简单总结: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虚拟机
============================================================
欢迎交流
============================================================

浙公网安备 33010602011771号