CAS及ABA问题
CAS 并发中线程安全必须保证三个要素, 原子性、可见性、有序性 。使用volatile可以保证可见性和有序性,但是不能保证原子性。所以还是会出现并发修改紊乱的问题。 这里的解决方法可以通过synchronized修饰,但是太重了,所以使用原子类保证原子性即可,但是原子类底层是如何保证原子性的值得研究,首先一点就是CAS。 CAS是什么 campareAndSwap. JDK8,在AtomicInteger类中有一个getAndAdd()方法,点进去,可以看到: public class AtomicInteger extends Number implements java . io . Serializable { private static final long serialVersionUID = 6214790243416807050 L ; // setup to use Unsafe.compareAndSwapInt for updates private static final Unsafe unsafe = Unsafe . getUnsafe ( ) ; private static final long valueOffset ; static { try { valueOffset = unsafe . objectFieldOffset (