atomic,原子性,指一个操作是不中断的。在多线程环境下,是指一个线程的操作一旦开始,就不会被其他线程干扰。
    在java.util.concurrent.atomic包下,提供了常用基本类型和引用类型的Atomic实现。其实现最重要的原理就是一个volatile变量,加上CAS操作保证原子性,这样最终能够保证共享变量操作的线程安全。
    image.png
    提供了boolean、int、long和对象的原子性操作,使用CAS保证原子性,volatile修饰变量保证可见性,最终保证共享变量操作线程的安全:

    • AtomicInteger
    • AtomicLong
    • AtomicBoolean
    • AtomicReference

    提供了对数组元素到原子性操作,使用CAS机制配置final机制来实现共享变量操作线程安全:

    • AtomicLongArray
    • AtomicIntegerArray
    • AtomicReferenceArray

    提供了原子类型字段更新器,提供对指定对象的指定字段进行原子性操作:

    • AtomicLongFieldUpdater
    • AtomicIntegerFieldUpdater
    • AtomicReferenceFieldUpdater

    带版本号的原子引用类型,以版本戳的方式解决原子类型CAS的ABA问题:

    • AtomicStampedReference
    • AtomicMarkableReference

    原子累加器,AtomicLong和AtomicDouble的生计类型,解决高并发环境下自旋瓶颈问题,专门用于数据统计,性能更高:

    • DoubleAccumulator
    • DoubleAdder
    • LongAccumulator
    • LongAddr