什么是CAS
CAS
即Compare And Swap
的缩写,翻译成中文就是比较并交换,其作用是让CPU比较内存中某个值是否和预期的值相同,如果相同则将这个值更新为新值,不相同则不做更新,也就是CAS是原子性的操作(读和写两者同时具有原子性),其实现方式是通过借助C/C++
调用CPU指令完成的,所以效率很高。
CAS
的原理很简单,这里使用一段Java
代码来描述
public boolean compareAndSwap(int value, int expect, int update) {
// 如果内存中的值value和期望值expect一样 则将值更新为新值update
if (value == expect) {
value = update;
return true;
} else {
return false;
}
}
大致过程是将内存中的值、我们的期望值、新值交给CPU进行运算,如果内存中的值和我们的期望值相同则将值更新为新值,否则不做任何操作。这个过程是在CPU中完成的,这里不好描述CPU的工作过程,就拿Java代码来描述了。
Unsafe源码分析
Java是在Unsafe(sun.misc.Unsafe)
类实现CAS
的操作,而我们知道Java是无法直接访问操作系统底层的API的(原因是Java的跨平台性限制了Java不能和操作系统耦合),所以Java并没有在Unsafe
类直接实现CAS
的操作,而是通过**JDI(Java Native Interface)**本地调用C/C++
语言来实现CAS
操作的。
Unsafe
有很多个CAS
操作的相关方法ÿ