今天在工作中,我遇到了Java中的 volatile
关键字。不是很熟悉,我找到 了这个解释。
鉴于那篇文章解释了相关关键字的详细信息,您是否曾经使用过它,或者您是否曾经看到过可以以正确方式使用该关键字的案例?
原文由 Richard 发布,翻译遵循 CC BY-SA 4.0 许可协议
今天在工作中,我遇到了Java中的 volatile
关键字。不是很熟悉,我找到 了这个解释。
鉴于那篇文章解释了相关关键字的详细信息,您是否曾经使用过它,或者您是否曾经看到过可以以正确方式使用该关键字的案例?
原文由 Richard 发布,翻译遵循 CC BY-SA 4.0 许可协议
“…… volatile 修饰符保证任何读取字段的线程都将看到最近写入的值。” - 乔什·布洛赫
如果您正在考虑使用 volatile
,请阅读包 java.util.concurrent
处理原子行为。
单例模式 上的维基百科帖子显示了 volatile in use。
原文由 Ande Turner 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
volatile
具有内存可见性的语义。基本上,volatile
字段的值在写入操作完成后对所有读取器(特别是其他线程)可见。如果没有volatile
,读者可能会看到一些未更新的值。回答您的问题:是的,我使用
volatile
变量来控制某些代码是否继续循环。循环测试volatile
值,如果是true
则继续。可以通过调用“停止”方法将条件设置为false
。循环看到false
并在 stop 方法完成执行后测试该值时终止。我强烈推荐的《 Java Concurrency in Practice 》一书很好地解释了
volatile
。这本书是由撰写问题中引用的 IBM 文章的同一个人撰写的(事实上,他在该文章的底部引用了他的书)。我对volatile
的使用是他的文章所说的“模式 1 状态标志”。如果您想了解更多关于
volatile
如何在后台工作的信息,请阅读 Java 内存模型。如果您想超越该级别,请查看像 Hennessy & Patterson 这样的优秀计算机体系结构书籍,并阅读有关缓存一致性和缓存一致性的内容。