java 8:LongAdder和LongAccumulator是AtomicLong的首选吗?
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吗? 解决方法
Javadoc中提到了这些类之间的差异,以及何时使用其中一个类.从
LongAdder 开始:
从
因此,一个使用另一个取决于您的应用程序打算做什么.它并不总是严格优先,只有在预期高并发并且您需要维持一个共同状态时. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |