Java是对原子方法Atomic的调用

时间:2016-01-14 07:00:31

标签: java multithreading concurrency atomic

我无法真正想到这个问题的优秀标题,但问题是以下对Atomic.set构造函数中Foo的调用是原子的,还是线程可以切换之前致电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);
    }
  }
}

1 个答案:

答案 0 :(得分:4)

在Java语言规范或Java虚拟机规范中无法保证在调用方法本身和调用atomic.set()内部之间没有其他线程运行。

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

留下了“你为什么关心?”的问题。但以上是你提出的问题的答案。