volatile 在 Java 的单线程应用程序中是否有用?

Is volatile useful at all in a singlethreaded application in Java?

如标题所示 - 在 Java 的 single-thread 编程环境中,volatile 是否有用?我知道它用于确保变量的值始终在内存中实际检查,所以在任何情况下该值可能会以 app/compiler 不会注意到的方式更改(在单线程应用程序中)?

不,至少对于您自己在单线程应用程序中定义的变量不是。

volatile 关键字保证了多次读取该变量的先行关系,这仅在多个线程访问它时才有意义。

其他见解here

从问题描述的角度看没有什么用,但是会影响代码执行:

Happens-before 语义对程序指令重新排序进行限制。通常如果你有

private int a;
private int b;
private boolean ready;

void calc(int x, int z) {
   a = x + 5;
   b = z - 3;
   ready = true;
}

允许 JIT 编译器以任何顺序执行方法指令(出于性能原因)。

但是如果你添加 volatile 关键字:private volatile boolean ready,那么它保证前两个操作会在 true 被分配给 ready 变量之前执行。这仍然很没用,但从技术上讲是有区别的。