Java 对原子方法的调用是原子的

Java Are Calls to an Atomic Method Atomic

我真的想不出这个问题的好标题,但问题是 Foo 构造函数中对 Atomic.set 的以下调用是原子的,还是之前的线程切换调用 AtomicInteger.set?

public class Foo {
  private final Atomic atomic = new Atomic();

  public Foo() {
    atomic.set(10);
  }

  private static class Atomic {
    private final AtomicInteger atomicInt = new AtomicInteger();

    public void set(int i) {
      atomicInt.set(i);
    }
  }
}

Java 语言规范或 Java 虚拟机规范不保证在调用方法本身和调用 atomic.set()里面。

这完全取决于 JVM、您的硬件等。如果您有多个 CPU,其他 CPU 甚至不知道其中一个 CPU在代码中,除非你使用 Java 中的线程同步功能。 (你没有这样做,至少在你的方法开始之间没有添加 atomic.set 的调用)

留下问题 "why do you care?" 但以上是对您提出的问题的回答。