您能否帮助我掌握AtomicInteger类的某些方法的要点:updateAndGetaccumulateAndGet

为什么第一个将IntUnaryOperator作为参数?可以在此接口的功能方法中潜在应用哪些逻辑?我的想法是,仅接受简单的int值会更容易。 (与IntBinaryOperator界面相同)。

提前致谢。

最佳答案

如果您想原子地将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实现,但是在某些情况下,如果您已经有两个参数的操作,使用起来可能会更简单。

关于java - 一些AtomicInteger方法的实际示例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33996362/

10-12 18:35
查看更多