我正在考虑从AtomicLong切换为使用LongAdder。我用它来计数到达服务器的请求,每1分钟将结果写入数据库,然后再次开始计数。为此,我使用了AtomicLong的getAndSet方法,打算将其替换为LongAdder的sumThenReset。

sumThenReset的文档规定以下内容:


  返回值不能保证是复位之前发生的最终值


那么我们在这里做了什么?这是否意味着某些增量可以定义为丢失并且不计入任何地方?

最佳答案

阅读整个方法文档:


  此方法可能适用于例如
  多线程计算。如果与此同时存在更新
  方法,不能保证返回值是最终值
  发生在重置之前。


静态意味着相当。也就是说,没有线程在更新LongAdder。因此,要回答您的问题,是的,可能会丢失一些增量。

从类文档中:


  当有多个线程时,此类通常比AtomicLong更可取
  更新用于收集等目的的总和
  统计信息,不适用于细粒度的同步控制。


可能您需要的是AtomicLong。

关于java - Java LongAdder sumThenReset并发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35203699/

10-13 03:31