请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

LongAdder误差问题?

LongAdder的缺点: 在统计的时候,如果有并发更新,可能会导致统计数据有些误差。

老师,可以举个例子吗?

正在回答

1回答

Jimin 2019-04-03 09:08:09

你好,这个拿核心代码讲解一下,重点看对这段核心的注释。

// 返回累加的和,也就是“当前时刻”的计数值

// 此返回值可能不是绝对准确的,因为调用这个方法时还有其他线程可能正在进行计数累加,

// 方法的返回时刻和调用时刻不是同一个点,在有并发的情况下,这个值只是近似准确的计数值

// 高并发时,除非全局加锁,否则得不到程序运行中某个时刻绝对准确的值,但是全局加锁在高并发情况下是下下策

// 在很多的并发场景中,计数操作并不是核心,这种情况下允许计数器的值出现一点偏差,此时可以使用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;

 }

这里说的不准确,是因为在返回值的过程中可能还有其他线程在操作,但是如果是明确的指定次操作,这些操作之后最终的结果是正确的

0 回复 有任何疑惑可以回复我~
  • 提问者 lian2019_03_26 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-04-03 22:01:03
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信