CompareAndSwap(CompareAndSet,CompareAndExchange)
一、CAS实现原理图
我们可以清楚的看到,CAS的操作原理。
在多线程的环境下,在某一个线程执行时,先读取这个值E,在这个线程执行的过程中算出新值,然后,这个线程读取到的旧值和原本的旧值做比较,看值是否发生改变。若相等,则说明这个线程在执行中,其他线程不能执行这部分代码。
二、ABA问题
ABA 问题,主要是指其他线程修改数据后,在把数据修改成和程序未执行前的旧值是一样的。
比如说 5 8 5。刚开始是5,中间状态是8,最终结果是5。这就是ABA问题。
要想解决ABA问题
采用版本号的方式
1.数值型
2.布尔类型的方式
三、AtomicInteger
主要是对Integer进行原子性操作。在内部调用了CompareAndSwapInt()方法,后面是native方法。
这个最终的实现是:
lock cmpxchg 指令 来实现的。