为什么要使用Longadder?
传统的原子操作类 AtomicLong 。他的原子性是通过 CAS 原理来实现的,但是有一个问题,如果并发大了,所有请求线程只有一个线程会成功,其他的线程都需要自旋等待。而自旋等待的cpu消耗是很大的。所以在并发量大的情况下,Atomiclong的性能是比较低的
LongAdder 的原理就是,加入了分段的概念,每个线程都有属于自己的桶位,线程针对自己桶位的值 做cas计算。
LongAdder流程
base变量:非竞争条件下,直接累加到该值上
cell[]数组:竞争条件下,累加到各自线程的槽中cell[i]
竞争条件下调用get方法获取LongAdder的值,才会去统计所有cell数组中的值