CAS机制

310 阅读1分钟

CAS:compare and swap(比较并交换)

1.在接触原子类的时候,我们接触了CAS机制,它的原理:

我们在看一下CAS的公式。

CAS(V,A,B)
1:V表示内存中的地址
2A表示预期值
3B表示要修改的新值

CAS的原理就是预期值A与内存中的值相比较,如果相同则将内存中的值改变成新值B。这样比较有两类:

第一类:如果操作的是基本变量,则比较的是 值 是否相等。

第二类:如果操作的是对象的引用,则比较的是对象在 内存的地址 是否相等。

2.CAS是Java乐观锁的一种实现机制:

在Java并发包中,大部分类就是通过CAS机制实现的线程安全,它不会阻塞线程,如果更改失败则可以自旋重试,但是它也存在很多问题:

1:ABA问题,也就是说从A变成B,然后就变成A,但是并不能说明其他线程并没改变过它,利用CAS就发现不了这种改变。
2:由于CAS失败后会继续重试,导致一致占用着CPU。

3.原子类的实现原理:

1)CAS + Volatile + native(本地方法)
(2)通过UnSafe类的本地方法objectFiledOffset()获取原本值的内存地址,由这个地址值去和预期值
     进行比较并修改,另外修改的值value用Volatile修饰,保证任何线程获取的值都是最新的值。