如果你有多个核心和 2 个线程共享一个非 volatile 字段(第一个只读取它,第二个进行一些写入),可能会出现第一个线程在第二个线程更新后看不到该字段的实际值的情况它,因为这个新值可以存储在另一个核心的缓存中。
单核环境也是这样吗?不同的缓存是否是造成这种不一致的唯一原因(我现在不考虑竞争条件和其他并发问题)?
最佳答案
编译器可能会得出结论,变量不能在某个 block 内更改并优化额外的负载,从而防止它们被观察到,即使在单核环境中也是如此。
我想知道你为什么要问。您应该针对语言/java 内存模型的保证进行编程,而不是针对某些特定于平台/实现的行为。
关于java - 单核jvm并发: are invisible updates possible?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31094476/