小编Mar*_*ark的帖子

'volatile' 是否保证任何线程读取最近写入的值?

来自《Effective Java》一书:

虽然 volatile 修饰符不执行互斥,但它保证任何读取该字段的线程都会看到最近写入的值

SO和许多其他来源声称类似的事情。

这是真的?

我的意思是真的,不是一个足够接近的模型,或者只在 x86 上,或者只在 Oracle JVM 中,或者“最近写的”的一些定义,这不是标准的英语解释......

其他来源(SO 示例)说 Java 中的 volatile 就像 C++ 中的获取/释放语义。我认为提供报价的保证。

我发现在JLS 17.4.4 中它说“对 volatile 变量 v 的写入(第 8.3.1.4 节)与任何线程对 v 的所有后续读取同步(其中“后续”是根据同步顺序定义的)。 ” 但我不太明白。

有很多支持和反对的消息来源,所以我希望答案能够说服其中许多(在任何一方)确实是错误的 - 例如参考或规范,或反示例代码。

java multithreading specifications volatile shared-memory

6
推荐指数
1
解决办法
177
查看次数