Adder和Accumulator
多线程的环境中,如果多个线程需要频繁地进行更新操作,且很少有读取的动作(比如,在统计计算的上下文中),JavaAPI文档中推荐大家使用新的类LongAdder、LongAccumulator、Double-Adder以及DoubleAccumulator,尽量避免使用它们对应的原子类型。这些新的类在设计之初就考虑了动态增长的需求,可以有效地减少线程间的竞争
LongAdder adder = new LongAdder();
for (int i = 1; i <= 100; i++) {
adder.add((long) i);
}
System.err.println(adder.sum());
LongAccumulator accumulator = new LongAccumulator(Long::sum, 0);
accumulator.accumulate(10);
accumulator.accumulate(10);
accumulator.accumulate(100);
System.err.println(accumulator.get());