今天在工作中,我偶然发现了volatileJava 中的关键字。不是很熟悉,我找到了这个解释。
volatile
鉴于那篇文章解释了相关关键字的详细信息,您是否曾经使用过它,或者您是否曾经看到过可以以正确方式使用该关键字的案例?
volatile具有内存可见性的语义。基本上,一个volatile字段的值在写入操作完成后对所有读取器(特别是其他线程)都是可见的。没有volatile,读者可能会看到一些未更新的值。
回答您的问题:是的,我使用volatile变量来控制某些代码是否继续循环。循环测试该volatile值,如果是 则继续true。可以false通过调用“停止”方法来设置条件。循环false在 stop 方法完成执行后测试值时看到并终止。
true
false
我强烈推荐的《Java Concurrency in Practice》一书很好地解释了volatile. 这本书是由撰写问题中引用的 IBM 文章的同一个人撰写的(事实上,他在该文章的底部引用了他的书)。我使用的volatile是他的文章所说的“模式 1 状态标志”。
如果您想了解更多关于幕后volatile工作原理的信息,请阅读Java 内存模型。如果您想超越该级别,请查看像Hennessy & Patterson这样的优秀计算机体系结构书籍,并阅读有关缓存一致性和缓存一致性的内容。