LongAdder
作爲替代AtomicLong
java 8:LongAdder和LongAccumulator是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?
現在有所不同。你能解釋一下上面的代碼片段中的二元運算符部分嗎? –
@ravindra'LongBinaryOperator'?這是一個函數接口,定義了一個以2個long參數爲參數並返回一個long參數的函數方法。所以,它可以用來操作2個多頭並從一些計算中返回一個長頭。例如,求和2個長整數:'LongBinaryOperator longAdder =(x,y) - > x + y;' – Tunaki