如果我运行单核机器上的应用程序,volatile关键字有什么用?

Is volatile keyword of any use if I run the application in single core machine?

我最近熟悉了 volatile 关键字,我发现不直接从主内存读取会导致不一致和所谓的可见性问题。

我相信 CPU 缓存不特定于任何线程。所以我想知道 volatile 关键字在单核处理器中是否有用?

好吧,拥有单个或多个处理器(核心)肯定会影响整个程序运行有效并行的能力,您仍然可以创建多个线程,它们将拥有自己的缓存和volatile 关键字仍将按预期运行 - JLS 没有为关键字指定依赖于处理器的行为更改。

请注意,唯一不同的是有效并行,这不是关键字行为的决定因素。

硬件级并发性显然是规范动机的重要组成部分,但规范非常明确要求适用于整个系统;因此,例如,JVM 的 "just-in-time" (JIT) 编译器可以合法地优化等同于

while (this.var) {
    ... code that provably never modifies var ...
}

相当于

if (this.var) {
    while (true) {
         ... code that provably never modifies var ...
    }
}

如果 var 不是 volatile