博客
关于我
LongAdder原理
阅读量:795 次
发布时间:2023-02-06

本文共 575 字,大约阅读时间需要 1 分钟。

在阿里巴巴编码规范中,LongAdder相比AtomicLong在高并发场景下展现出更高的效率,主要原因在于减少了AtomicLong空自旋带来的效率损耗。这种优势来源于LongAdder采用了热点分离的思想,从而降低了并发更新时的竞争率。

然而,LongAdder在并发更新时也存在一个潜在问题:当发生并发计数时,可能会导致最终结果不正确。这种情况通常发生在多个线程同时尝试修改计数器时,可能会导致数据竞争,进而影响最终的计数结果。

以下是LongAdder的实现代码:

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;}

这个方法返回当前的总和。需要注意的是,返回的值并非一个原子性快照。在没有并发更新时,方法能够返回准确的结果。但在存在并发更新的情况下,可能会因为并发修改而导致最终结果不正确。

转载地址:http://cnufk.baihongyu.com/

你可能感兴趣的文章
Log4j2 消停了,Logback 开始塌房了?
查看>>
Log4j2 消停了,Logback 开始塌房了?
查看>>
Log4j2.xml中动态读取配置
查看>>
Log4j2滚动策略深度解析:保持日志轻量高效
查看>>
Log4j使用总结
查看>>
Log4j使用配置总结
查看>>
log4j分离日志输出 自定义过滤 自定义日志文件
查看>>
Log4j日志级别
查看>>
Log4j日志级别 转
查看>>
log4j日志输出格式
查看>>
log4j日志输出格式一览
查看>>
log4j框架搭建
查看>>
Log4j漏洞?一行代码都不改就能永久修复?
查看>>
Log4J的配置
查看>>
log4j的配置说明
查看>>
log4j补充
查看>>
log4j记录日志
查看>>
Log4j输出到控制台成功,写入文件失败 - Log4j和commons log的整合
查看>>
Log4j配置详解和实例
查看>>
Log4Net组件的应用详解
查看>>