原子类
举例解释
AtomicInteger counter = new AtomicInteger(5);
boolean success = counter.compareAndSet(5, 6); // 如果当前是5,则设置为6
原理
1、CAS 依赖底层 CPU 提供的汇编语言原子指令 lock cmpxchg,硬件层面加锁了,可以理解为atomic.compareAndSet就是一个原子操作。
2、如果数据是64个字节以内用缓存行锁,超过64个字节用总线锁。
当前值是 5 → 与预期值相同 → 更新为 6 → 返回 true
当前值不是 5(比如已被其他线程改成了 7)→ 不更新 → 返回 false
位置
原子类在java.util.concurrent.atomic包下
常用的有
常用的有:AtomicBoolean、AtomicInteger、AtomicLong、AtomicIntegerArray、AtomicReference、DoubleAdder、LongAdder
如果做累加操作建议使用LongAdder,比AtomicLong性能更好。