CAS的全称是Compare And Swap 即比较交换,其算法的核心思想如下函数:
CAS(V,E,N) 参数: V表示要更新的变量 E预期值 N新值
如果V值等于E值,则将V的值设为N.若V值和E值不同,则说明已经有其他线程做了更新,则当前线程说明都不能做.通俗的理解就是CAS操作需要我们提供一个期望值,当期望值与当前线程的变量相同时,说明还没线程修改该值,当前线程可以进行修改,也就是执行CAS操作,但如果期望值与当前线程不符,则说明该值已经被其他线程修改,此时不执行更新操作,但可以选择或者再尝试修改变量,也可以放弃操作.
java的CAS操作通过Unsave类来完成里面基本都是native,即通过JNI调用c/c++等代码.