java - volatile 关键字有什么用?

标签 java multithreading keyword volatile

今天在工作中,我遇到了 Java 中的 volatile 关键字。由于不太熟悉,我发现了this explanation .

鉴于该文章详细解释了相关关键字,您是否曾经使用过它,或者您是否见过可以正确使用该关键字的情况?

最佳答案

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

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

我强烈推荐的书“Java Concurrency in Practice”对 volatile 给出了很好的解释。这本书的作者是问题中引用的 IBM 文章的同一个人(事实上,他在那篇文章的底部引用了他的书)。我对 volatile 的使用被他的文章称为“模式 1 状态标志”。

如果您想了解更多关于如何 volatile在幕后工作,请阅读 the Java memory model 。如果你想超越这个水平,请查看一本好的计算机架构书籍,例如 Hennessy & Patterson并了解缓存一致性和缓存一致性。

关于java - volatile 关键字有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58054940/

相关文章:

转换为多线程套接字应用程序

c# - C#线程和类问题

java - Linux 中运行的线程数有最大限制吗?

java - Java 中的 native 关键字是干什么用的?

haskell - Haskell 是否允许在标识符中使用关键字?

java - 使用 RESTful Jersey 返回自定义 JSON

java - jsqlparser 评估条件

java - 错误 :Execution failed for task ':app:transformClassesWithDexForDebug' . >

java - 自动将类添加到源代码管理

youtube - 使用 YouTube 开发者 key 提取媒体关键字