atomic,原子性,指一个操作是不中断的。在多线程环境下,是指一个线程的操作一旦开始,就不会被其他线程干扰。
在java.util.concurrent.atomic包下,提供了常用基本类型和引用类型的Atomic实现。其实现最重要的原理就是一个volatile变量,加上CAS操作保证原子性,这样最终能够保证共享变量操作的线程安全。
提供了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