【发布时间】:2021-05-29 14:29:18
【问题描述】:
我正在阅读 Cay S. Horstmann 撰写的《Core Java I》一书,他在第 580 页提到了 LongAdder:
如果您预计会出现高争用 [*1],您应该简单地使用 LongAdder 而不是 原子长。方法名称略有不同。调用 increment 来增加一个计数器 或 add 以添加数量,然后求和以检索总数。
var adder = new LongAdder();
for (. . .)
pool.submit(() -> {
while (. . .) {
. . .
if (. . .) adder.increment();
}
});
. . .
long total = adder.sum();
注意 当然,增量方法不会返回旧的 [*2] 值。这样做会撤消 将总和拆分为多个和的效率增益。
在 [*1] 中的“争用”一词,我认为他的意思是机器的第二个严重过载,即有很多线程在运行 java 代码。
在 [*2] 中,他提到了 old 值。 old 和 new 在这种情况下的价值是什么?能否请您简单解释一下。
【问题讨论】:
标签: java multithreading