gpt4 book ai didi

Java volatile 和副作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:07:08 26 4
gpt4 key购买 nike

Oracle 关于原子访问的文档(位于 http://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html)是这样说的:

"a volatile variable establishes a happens-before relationship... . This means that ... when a thread reads a volatile variable, it sees not just the latest change to the volatile, but also the side effects of the code that led up the change."

我无法解决这个问题。我了解 volatile 变量的工作原理(在 >= Java 5 中),但我想知道 java 如何决定是什么副作用“导致”了 volatile 变量的变化。

所以我想我的问题是:这种保证有什么副作用?

编辑:

所以我了解到,如果线程 A 修改了一个 volatile 变量,然后线程 B 读取它,那么在写入 volatile 变量之前发生的线程 A 的所有写入相对于线程 B 都是“一致的”(即受线程 A 上述写入影响的变量的缓存值在线程 B 中无效)。如果我错了,请纠正我。

最佳答案

大多数多处理器缓存都有一致性机制,因此惩罚没有刷新所有缓存那么糟糕。

在写入 volatile 之前写入 volatile 的线程中的任何写入都将被读取 volatile 的线程看到。

关于Java volatile 和副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9169232/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com