volatile 关键字有什么用?

新手上路,请多包涵

今天在工作中,我遇到了Java中的 volatile 关键字。不是很熟悉,我找到 了这个解释

鉴于那篇文章解释了相关关键字的详细信息,您是否曾经使用过它,或者您是否曾经看到过可以以正确方式使用该关键字的案例?

原文由 Richard 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 679
2 个回答

volatile 具有内存可见性的语义。基本上, volatile 字段的值在写入操作完成后对所有读取器(特别是其他线程)可见。如果没有 volatile ,读者可能会看到一些未更新的值。

回答您的问题:是的,我使用 volatile 变量来控制某些代码是否继续循环。循环测试 volatile 值,如果是 true 则继续。可以通过调用“停止”方法将条件设置为 false 。循环看到 false 并在 stop 方法完成执行后测试该值时终止。

我强烈推荐的《 Java Concurrency in Practice 》一书很好地解释了 volatile 。这本书是由撰写问题中引用的 IBM 文章的同一个人撰写的(事实上,他在该文章的底部引用了他的书)。我对 volatile 的使用是他的文章所说的“模式 1 状态标志”。

如果您想了解更多关于 volatile 如何在后台工作的信息,请阅读 Java 内存模型。如果您想超越该级别,请查看像 Hennessy & Patterson 这样的优秀计算机体系结构书籍,并阅读有关缓存一致性和缓存一致性的内容。

原文由 Greg Mattes 发布,翻译遵循 CC BY-SA 3.0 许可协议

“…… volatile 修饰符保证任何读取字段的线程都将看到最近写入的值。” - 乔什·布洛赫

如果您正在考虑使用 volatile ,请阅读包 java.util.concurrent 处理原子行为。

单例模式 上的维基百科帖子显示了 volatile in use。

原文由 Ande Turner 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题