java - 单核jvm并发: are invisible updates possible?

标签 java concurrency jvm java-memory-model

如果你有多个核心和 2 个线程共享一个非 volatile 字段(第一个只读取它,第二个进行一些写入),可能会出现第一个线程在第二个线程更新后看不到该字段的实际值的情况它,因为这个新值可以存储在另一个核心的缓存中。

单核环境也是这样吗?不同的缓存是否是造成这种不一致的唯一原因(我现在不考虑竞争条件和其他并发问题)?

最佳答案

编译器可能会得出结论,变量不能在某个 block 内更改并优化额外的负载,从而防止它们被观察到,即使在单核环境中也是如此。

我想知道你为什么要问。您应该针对语言/java 内存模型的保证进行编程,而不是针对某些特定于平台/实现的行为。

关于java - 单核jvm并发: are invisible updates possible?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31094476/

相关文章:

java - 为什么我们不能将实例变量传递给父类(super class)构造函数?

java - Gradle 构建错误 "Configuration with name ' 默认未找到。”

java - setVisible(true) 之后的 JTabbedPane.setBackgroundAt(index, Color) 没有效果

java - 从一个文件高效复制到另一个文件

java - 如何用 Java 编写一个基本的交换函数

java - 数组在 Java 中是线程安全的吗?

Java ScheduledExecutorService 执行速度比预期快

java - 在独立 JVM 上使用 Spring 注册 JMX MBean

java - JVM 中的乌龙是什么?

java - Finalize() 何时执行?