java - 为什么我们必须使用相同的 volatile 字段来使用 volatile 关键字建立 happens-before 关系?

标签 java multithreading concurrency

'Volatile Rule'表示“对 volatile 字段的写入发生在同一字段的每次后续读取之前”, 我知道这意味着如果我们写入一个 volatile 线程并在另一个线程中读取另一个 volatile,那么这两个操作之间没有 happens-before 关系。

我的问题是为什么我们必须使用“相同字段”?

最佳答案

它应该是这样工作的不是吗?我们只希望线程之间共享的数据应该是一致的,那么为什么不同变量之间要有 happens-before 关系呢?在同一领域的关系之前发生是有道理的,因为如果我们不这样做,可能会导致数据竞争。不是吗?

关于java - 为什么我们必须使用相同的 volatile 字段来使用 volatile 关键字建立 happens-before 关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46945026/

相关文章:

java - 表数据模型更改后 JTable cellEditor 保留

java - Servlet getRequestDispatcher.forward() 工作不清楚

c - 运行程序时出现段错误和变化的输出

multithreading - MSAA 不在主线程中产生新行为

java - 自动更新jtextfield

java - Spring @Transaction 和@Async 数据库操作的用法

java - 将拦截器与 JUnit 结合使用

java - 类类型作为Java中的参数

Java线程和输出流打印问题

java - 多个线程可以看到 Java 中直接映射的 ByteBuffer 上的写入吗?