原子操作的简单介绍
1.说明
原子操作是指不会被线程调度机制打断的操作。
是一个整体,不会被切割;一旦开始,直到结束,不会被切换;顺序不会被打断。
可以避免多线程操作共享资源出现的问题。
2.使用原子操作的好处
实现轻量级的同步
CPU指令级别提供支持
场景:对少量资源进行数据更新操作。
例如,对单个变量进行操作的场合。
3.常用原子操作类
基本类型原子更新类
AtomicInteger
AtomicBoolean
AtomicLong
数组类型原子更新类
AtomicIntegerArray
AtomicLongArray
AtomicReferenceArray
引用类型原子更新类
AtomicReference
AtomicStampedReference
AtomicMarkableReference
对象属性原子更新类
AtomicIntegerFieldUpdater
AtomicLongFieldUpdater
AtomicReferenceFieldUpdater
4.使用
(1).AtomicInteger的常用方法
incrementAndGet():先自增再取值。
getAndIncrement():先取值再自增。
get():获取当前的值。
(2).AtomicReference的常用方法
初始化:
AtomicReference<User> atomicReference = new AtomicReference<>();
赋值:
atomicReference.set(user1);
替换原来的值,只是改变了atomicReference对象的值,user1的值不会改变。
atomicReference.compareAndSet(user1, user2);
5.实现原理
处理器通过总线锁和缓存锁保证基本内存操作的原子性。
循环CAS:
CAS操作需要输入两个数值,一个旧值(期望操作 前的值),一个新值,在操作期间先比较旧值有没有发生变化,如果没有发生变化才交换成新值,发生了变化则不交换。
操作的问题:
只能保证一个共享变量的操作
CAS操作长时间不成功
ABA问题:通过添加版本号来解决
参照:
原子类型:AtomicReference详解_wyaoyao93的博客-CSDN博客
3、CAS基本原理 - 简书