1 何为原子变量(Atomic)
1 计算机中的Atomic是指不能分割的最小单位。
2 JKD1.5之后java.util.concurrent.atomic包下提供了原子变量,主要的原子变量如下:- AtomicBoolean - AtomicInteger - AtomicIntegerArray - AtomicIntegerFieldUpdater - AtomicLong - AtomicLongArray - AtomicLongFieldUpdater - AtomicMarkableReference - AtomicReference - AtomicReferenceArray - AtomicReferenceFieldUpdater - AtomicStampedReference
3 原子变量的原子性由CAS(Compare and swap)算法保障原子性
1 | /** |
2 CAS算法
1 Java中原子变量的cas操作是由底层硬件保障的。
2 CAS的原理:顾名思义(比较并交换),即与期望值比较如果相同则交换并返回结果,否则重试直到成功为止。
3 优点:是一种乐观锁(区别于synchronized同步锁的一种乐观锁),使用非阻塞算法执行效率高。
4 主要缺点:高并发下如果与期望值比较成功率较低的情况下,会增加循环重试数,会给CPU带来额外开销。