概述
在面对并发的场景,我们要对共享的资源进行保护,方式一般有两种,一种是使用Synchronized对资源进行加锁,另外一种方式就是本文要介绍的使用CAS来对共享资源进行保护。
CAS全称是Compare And Swap,意思是比较与交换。通过比较之前的值是否发生改变,来决定是否对共享资源进行修改,如果这个值变了,那就说明有其它线程已经修改过这个值了,则修改失败,返回false,如果值没变,那顺利修改并且返回true
CAS底层是调用了native本地函数库,调用的是c++编写的函数,通过操作系统底层实现CAS的原子性。
Compare,必须需要读这个资源当前的值,才能进行比较,这也就是为什么CAS底层必须需要volatile来帮助。volatile原理
应用
经典的多线程取钱问题就可以用CAS无锁编程解决
interface Account {
// 获取余额
Integer getBalance();
// 取款
void withdraw(Integer amount);
/**
* 方法内会启动 1000 个线程,每个线程做 -10 元 的操作