LongAdder———源码分析
2022-6-9 Mr Chang JUC
AtomicLong 利用 CAS原理不停的在自旋 导致性能消耗,如果涉及高并发,大数据,,,量变引起质变!!!
LongAdder 利用cell数组将热点进行拆分,最后得到统计求和的结果。
result = base + Cell 数组 上述两者全部,才是最后OK。
-
最初无竞争时只更新base;
-
如果更新base失败后,首次新建一个cell[]数组
-
当多个线程竞争同一个Cell比较激烈时,可能就要对Cell[]扩容
Add方法源码解析
-
如果Cells表为空,尝试用CAS更新base字段,成功则推出。
-
如果Cells表为空,CAS更新base字段失败,出现竞争,uncontended为true,调用longAccumulate;
-
如果Cells表非空,当前线程映射的槽为空,uncontended为true,调用longAccumulate;
-
如果Cells表非空,且前线程映射的槽非空,CAS更新Cell的值,成功则返回,否则uncontended设为false,调用longAccumulate。
longAccumulate方法源码解析
发表评论: