我正在考虑从AtomicLong切换为使用LongAdder。我用它来计数到达服务器的请求,每1分钟将结果写入数据库,然后再次开始计数。为此,我使用了AtomicLong的getAndSet方法,打算将其替换为LongAdder的sumThenReset。
sumThenReset的文档规定以下内容:
返回值不能保证是复位之前发生的最终值
那么我们在这里做了什么?这是否意味着某些增量可以定义为丢失并且不计入任何地方?
最佳答案
阅读整个方法文档:
此方法可能适用于例如
多线程计算。如果与此同时存在更新
方法,不能保证返回值是最终值
发生在重置之前。
静态意味着相当。也就是说,没有线程在更新LongAdder。因此,要回答您的问题,是的,可能会丢失一些增量。
从类文档中:
当有多个线程时,此类通常比AtomicLong更可取
更新用于收集等目的的总和
统计信息,不适用于细粒度的同步控制。
可能您需要的是AtomicLong。
关于java - Java LongAdder sumThenReset并发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35203699/