【问题标题】:Practical example of some AtomicInteger's methods一些 AtomicInteger 方法的实际示例
【发布时间】:2016-03-03 22:57:34
【问题描述】:
能否请您帮我掌握 AtomicInteger 类的一些方法的要点:updateAndGet,accumulateAndGet。
为什么第一个接收IntUnaryOperator 作为参数?什么逻辑可以潜在地应用在这个接口的功能方法中?我的想法是,接收简单的int 值会更容易。 (与IntBinaryOperator 接口相同)。
提前致谢。
【问题讨论】:
标签:
java
integer
atomic
atomicinteger
【解决方案1】:
如果您想以原子方式将存储在 AtomicInteger 中的值加倍,那么在 Java 8 之前您可以做的最好的事情就是编写
while (true) {
int x = ai.get();
if (ai.compareAndSet(x, 2 * x)) {
return 2 * x;
}
}
...但是 Java 8 允许您编写例如
ai.updateAndGet(x -> 2 * x);
...和accumulateAndGet 可以说,让你原子地将ai 乘以y 与
ai.accumulateAndGet(y, (x, y) -> x * y);
...也可以使用updateAndGet 来实现,但在某些已经有两个参数操作的情况下使用起来可能会更简单。