作用:保证并发安全,相比于锁,具有一定的优势:
粒度更细:可以把竞争范围缩小到变量级别
效率更高:除了高度竞争的情况,使用原子类的效率比锁更高。
原子类总览
基本类型:AtomicInteger,AtomicLong,AtomicBoolean
数组类型:AtomicIntegerArray,AtomicLongArray,AtomicBooleanArray
引用类型原子类:AtomicReference.AtomicStampedReference,AtomicMarkableReference
升级型:AtomicIntegerfFeldupdater,AtomicLongFieldUpdater,AtomicReferenceFieldUpdater
可以对普通变量进行升级
使用场景:偶尔需要get和set操作
注意点:
- 属性可见
- 不支持static变量
Adder累加器:LongAdder ,DoubleAdder
LongAdder效率比atomicLong要高。AtomicLong 每做一次加法运算都需要同步,,LongAdder进行分段累加,但是LongAdder只适合求和计数的场景
Accumulator 累加器 LongAccumulator,DoubleAccumulator
功能升级,不限于加操作
线程的执行顺序不能影响执行结果
AtomicInteger常用方法
getAndIncrement
getAndDecrement
getAndAdd
CompareAndSet
CAS原理
compare and swap
应用场景
乐观锁
并发容器
原子类
缺点
ABA问题 添加版本号
自旋时间长