1 什么是CAS
CAS是compare and swap的缩写,中文可以翻译成:比较并交换。CAS操作来源于底层硬件领域。因为CAS能够极大地提高并发效率,因此在硬件设计领域,CAS这种操作就是存在的。
synchronized
这种独占锁属于悲观锁,乐观锁最常见的就是CAS
。
CAS的思想本质上就是乐观锁思想。即:假设情况都是乐观的,那么当前内存位置V的值是预期原值A,如果这样,请把内存位置V的值设置为新值B;否则,乐观的情况不成立,什么也别做。
乐观锁的思想减少了使用同步块等悲观锁的开销,但是本质是基于乐观锁思想的,因此肯定存在一些问题,即在高并发的情况下,有时需要进行多轮CAS操作才能完成值的更新。
2 CAS原理
CAS 有三个操作数:当前值A、内存值V、要修改的新值B
3 CAS缺点
会带来ABA的问题例如:
1. 线程A读到当前值是10,可能线程B把值修改为100,然后线程C又把值修改为10
2.等到线程A拿到执行权时,因为当前值和内存值是一致的,线程A是可以修改的
3.这是不合理的,因为我们从上帝的角度来看,这个变量已经被线程B和线程C修改过了
解决办法:Java也提供了AtomicStampedReference类供我们用,说白了就是加了个版本,比对的就是内存值+版本是否一致。
标签:Compare,CAS,新值,乐观,修改,线程,Swap,内存 From: https://www.cnblogs.com/ningshare/p/16916203.html