(九)JUC - 原子操作类之18罗汉增强

1. 基本类型原子类

AtomicInteger、

AtomicLong、

2. 数组类型原子类

AtomicIntegerArray

3. 引用类型原子类

AtomicReference

AtomicStampedReference  version号,+1  解决修改过几次

AtomicMarkableReference  一次,false,true   解决是否修改过

面试:CAS --- Unsafe --- do while + ABA --- AtomicStampedReference,AtomicMarkableReference

4. 对象的属性修改原子类

AtomicIntegerFieldUpdater

AtomicLongFieldUpdater、

AtomicReferenceFieldUpdater

1)使用目的:

以一种线程安全的方式操作非线程安全对象内的某些字段。

2)使用要求:

更新的对象属性必须使用 public volatile 修饰符;

因为对象的属性修改类型原子类都是抽象类,所以每次使用都必须使用静态方法newUpdater()创建一个更新器,并且需要设置想要更新的类和属性

面试:你在哪里用了volatile --- AtomicIntegerFieldUpdater

5. 原子操作增强类(jdk8+)

DoubleAccumulator

DoubleAdder

LongAccumulator

LongAdder

 

6. LongAdder

常用API

LongAdder只能用来计算加法,且从零开始计算。

LongAccumulator提供了自定义的函数操作。

 

性能对比

---costTime: 455 ms     clickBySynchronized:    50000000

---costTime: 934 ms     clickByAtomicLong:      50000000

---costTime: 95 ms      clickByLongAdder:       50000000

---costTime: 80 ms      clickByLongAccumulator: 50000000

7. LongAdder为什么这么快?

Striped64

Cell

 

Striped64 比较重要的成员函数

 

Striped64 最重要两个

 

Striped64 一些变量或者方法的定义

AtomicLong vs LongAdder

LongAdder快的原因(一句话):

base变量cell数组

 

数学表达

 

8.LongAdder 源码分析

longAdder.increment()

  • add(1L)
  • longAccumulate
  • sum

9. 原子操作增强类小总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值