LongAdder

为什么要使用Longadder?

传统的原子操作类 AtomicLong 。他的原子性是通过 CAS 原理来实现的,但是有一个问题,如果并发大了,所有请求线程只有一个线程会成功,其他的线程都需要自旋等待。而自旋等待的cpu消耗是很大的。所以在并发量大的情况下,Atomiclong的性能是比较低的

LongAdder 的原理就是,加入了分段的概念,每个线程都有属于自己的桶位,线程针对自己桶位的值 做cas计算。

LongAdder流程

base变量:非竞争条件下,直接累加到该值上

cell[]数组:竞争条件下,累加到各自线程的槽中cell[i]

竞争条件下调用get方法获取LongAdder的值,才会去统计所有cell数组中的值

Author: iMine
Link: https://imine141.github.io/2022/10/29/Java%E5%9F%BA%E7%A1%80/java%E6%BA%90%E7%A0%81/LongAdder/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.