jdk8 新增原子操作类----------LongAdder

JDK8引入LongAdder来优化高并发下AtomicLong的性能问题。LongAdder通过维护多个Cell变量分散更新操作,减少线程竞争,提高效率。在初始化时采用惰性加载,当并发线程较少时直接操作base,避免了不必要的内存占用。Cell类使用字节填充防止伪共享,提高缓存利用率。LongAdder是LongAccumulator的特例,提供累加功能,而LongAccumulator允许自定义累加规则和初始值。
摘要由CSDN通过智能技术生成

AtomicLong 通过CAS 提供了非阻塞的原子性操作,相比使用阻塞算法的同步器来说它的性能己经很好了,但是JDK 开发组并不满足于此。使用AtomicLong 时,在高并发下大量线程会同时去竞争更新同→个原子变量,但是由于同时只有一个线程的CAS 操作会成功,这就造成了大量线程竞争失败后,会通过无限循环不断进行自旋尝试CAS 的操作, 而这会白白浪费CPU 资源。

因此JDK 8 新增了一个原子性递增或者递减类LongAdder 用来克服在高并发下使用AtomicLong 的缺点。既然AtomicLong 的性能瓶颈是由于过多线程同时去竞争一个变量的更新而产生的,那么如果把一个变量分解为多个变量,让同样多的线程去竞争多个资源,从而解决性能问题。

AtomLong:多个线程同时竞争一个原子变量

LongAdder:

使用LongAdder 时,则是在内部维护多个Cell 变量,每个Cell 里面有一个初始值为0 的long 型变量,这样,在同等并发量的情况下,争夺单个变量更新操作的线程量会减少,这变相地减少了争夺共享资源的并发量。另外,多个线程在争夺同一个Cell 原子变量时如果失败了, 它并不是在当前Ce ll 变量上一直自旋CAS 重试&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值