首先要知道
分类
基本类型包装类-原子类
- AtomicBoolean(原子Boolean类)
- AtomicInteger(原子整形类)
- AtomicLong(原子长整型类)
原子数组类
- AtomicIntegerArray(整型原子数组类)
- AtomicLongArray(长整型原子数组类)
- AtomicReferenceArray(引用对象原子数组类)
字段更新器原子类
- AtomicReferenceFieldUpdater
- AtomicIntegerFieldUpdater
- AtomicLongFieldUpdater
为什么要用字段更新器原子类呢?
如下图所示,当我们只想更改money频繁的时候,如果我们给下面的方法加锁,其实就是给整个类加锁了,性能不好。所以引出了字段更新器原子类,去专门更新money
字段更新器原子类用法:
1.修饰的变量必须用public volatile修饰
2.使用静态方法newupdater()创建一个更新器,然后传入类和类中的属性
AtomicIntegerFieldUpdater age = AtomicIntegerFieldUpdater.newUpdater(User.class, "age");
注意:java8以后,高并发量时,我们就推荐LongAdder去代替了
LongAdder为什么高吞吐量下比AtomicLong更好呢,是因为当数据量变多时,会临时增加cell窗口,接着对cell里也进行CAS,所以LongAdder的缺点就是牺牲了空间