描述
CAS(Compare And Swap)就是乐观锁机制。加锁就是原子操作,原子操作就是类似于事务,syn就是原子操作。
原理
利用现代处理器的CAS指令,循环这个指令,直到成功为止。
CAS问题
1、ABA问题:根据版本号可以解决。
2、开销问题:因为可能不断循环计算,所以比较消耗cpu性能
3、只能保证一个共享变量的原子操作
Jdk中相关原子操作类的使用
(1) 更新基本类型类:AtomicBoolean,AtomicInteger,AtomicLong;
(2) 更新数组类:AtomicIntegerArray,AtomicLongArray,AtomicReferenceArray;
(3)更新引用类型类:AtomicReference(可以解决只能有一个共享变量的问题),AtomicMarkableReference(会记录是否变化,可以解决ABA问题),AtomicStampedReference(会记录变化的次数,可以解决ABA问题);
(4) 原子更新字段类:AtomicReferenceFieldUpdater(更新某个类中的某个字段),AtomicIntegerFieldUpdater,AtomicLongFieldUpdater。
Atomic原理:Atomic操作数组实际上更改数据后是新建了一个数组而不会操作原来的数组。使用AtomicReference可以解决只能修改一个变量的问题。