【发布时间】:2016-06-11 20:40:04
【问题描述】:
LongAdder 作为AtomicLong 的替代品
ExecutorService executor = Executors.newFixedThreadPool(2);
IntStream.range(0, 1000)
.forEach(i -> executor.submit(adder::increment));
stop(executor);
System.out.println(adder.sumThenReset()); // => 1000
LongAccumulator 是LongAdder 的更通用版本
LongBinaryOperator op = (x, y) -> 2 * x + y;
LongAccumulator accumulator = new LongAccumulator(op, 1L);
ExecutorService executor = Executors.newFixedThreadPool(2);
IntStream.range(0, 10)
.forEach(i -> executor.submit(() -> accumulator.accumulate(i)));
stop(executor);
System.out.println(accumulator.getThenReset()); // => 2539
我有一些疑问。
-
LongAdder总是优先于 AtomicLong 吗? -
LongAccumulator是否优于 LongAdder 和 AtomicLong?
【问题讨论】:
标签: java concurrency java-8