
LongAdder与LongAccumulator
发布日期:2021-05-06 17:45:18
浏览次数:17
分类:原创文章
本文共 1100 字,大约阅读时间需要 3 分钟。
1 为什么还要LongAdder
LongAdder类是JDK1.8新增的一个原子性操作类。高并发的请求下,AtomicLong的cas自旋算法,竞争激烈,导致性能下降。这个类有价值的代码也就几十行。
public class LongAdder extends Striped64 implements Serializable { public LongAdder() { } public void add(long x) { Cell[] as; long b, v; int m; Cell a; if ((as = cells) != null || !casBase(b = base, b + x)) { boolean uncontended = true; if (as == null || (m = as.length - 1) < 0 || (a = as[getProbe() & m]) == null || !(uncontended = a.cas(v = a.value, v + x))) longAccumulate(x, null, uncontended); } } public void increment() { add(1L); } public void decrement() { add(-1L); } public long sum() { Cell[] as = cells; Cell a; long sum = base; if (as != null) { for (int i = 0; i < as.length; ++i) { if ((a = as[i]) != null) sum += a.value; } } return sum; }
这里出现了一个类Cell,这个类是Striped64类的静态内部类,因此当Striped64对象初始化时并不会连带将Cell类初始化,其源码如下
2 LongAccumulator
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月15日 02时51分49秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
从头实现一个WPF条形图
2019-03-05
.NET CORE(C#) WPF 重新设计Instagram
2019-03-05
.NET CORE(C#) WPF 方便的实现用户控件切换(祝大家新年快乐)
2019-03-05
C# WPF开源控件库:MahApps.Metro
2019-03-05
使用QT实现一个简单的登陆对话框(纯代码实现C++)
2019-03-05
QT :warning LNK4042: 对象被多次指定;已忽略多余的指定
2019-03-05
GLFW 源码 下载-编译-使用/GLAD配置
2019-03-05
针对单个网站的渗透思路
2019-03-05
Typescript 学习笔记六:接口
2019-03-05
回溯法求解n皇后和迷宫问题
2019-03-05
拥抱HTML5
2019-03-05
Scala字符串与容器
2019-03-05
关于JTAG,你知道的和不知道的都在这里
2019-03-05
【CTF】CTFHub 技能树 文件头检查 writeup
2019-03-05
web服务器-并发服务器2
2019-03-05
【算法】解析位运算
2019-03-05
【Servlet】web.xml中welcome-file-list的作用
2019-03-05
【SqlServer】如何把本地SqlServer数据库部署到远程服务器上
2019-03-05
【ASP.NET】ASP.NET中权限验证使用OnAuthorization实现
2019-03-05