• CAS、自旋、volatile内存可见性
      • do-while循环直到判断条件返回true为止。该操作称为自旋。
    • Unsafe 的CAS详解
      • Unsafe类是整个Concurrent包的基础,里面所有方法都是native的。具体到上面提到的compareAndSetInt方法,即:
      • 在Unsafe类中,只提供了三种类型的CAS操作:int、long、Object(也就是引用类型)。 这三种CAS操作都是由底层实现的,其他类型的CAS操作都要转换为这三种之一进行操作。

    image.png

    • AtomicBoolean

      • 为什么用volatile不够?
        1. if (!flag) {
        2. flag = true;
        3. // ...
        4. } /
        5. / 或者更清晰一点的:
        6. if (flag == false) {
        7. flag = true;
        8. // ...
        9. }
    • ABA问题

      • 我赚了100,但是被别人花了,0-100-0,这就是ABA问题
      • 所以不仅要比较“值”,还要比较“版本号”
      • 这就是AtomicStampedReference 所解决的问题
      • AtomicMarkableReference 类似,只是里面存着的不是版本号,而是boolean
    • 原子数组类
      • AtomicIntegerArray、AtomicLongArray和AtomicReferenceArray
      • 这里并不是说对整个数组的操作是原子的,而是针对数组中一个元素的原子操作而言。