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?" 但以上是对您提出的问题的回答。
我真的想不出这个问题的好标题,但问题是 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?" 但以上是对您提出的问题的回答。