如果本文有错,希望在下面的留言区指正。
在之前的一些源码分析中,为了实现并发,Doug Lea 大佬在Java8及以上,大量使用了 CAS 操作。JDK 提供的关于 CAS 原子操作的类在下面工具包里面:
JDK为Java基本类型都提供了CAS工具类。
CAS
以 AtomicInteger
为例,进行分析:
1 | public final boolean compareAndSet(int expect, int update) { |
如上面的源码,对于 CAS 操作,这里会出现3个值,expect、update、value。只有当expect和内存中的value相同时,才把value更新为update。
ABA 问题
假设如下事件序列: