使用volatile只在多处理器系统中有意义。这是错的吗?
我正在努力学习线程编程,所以如果你知道任何好的文章/ pdf ...我喜欢那些提到操作系统如何工作的东西,而不仅仅是语言的语法。
答案 0 :(得分:10)
没有。易失性可用于多线程应用程序。这些可能会或可能不会在多个处理器上运行。
答案 1 :(得分:8)
volatile用于确保所有线程都看到相同的数据副本。如果只有一个线程读/写字段,则不需要是volatile。它会工作得很好,只是有点慢。
在Java中,您对处理器体系结构的了解并不多,通常您会谈到线程和多线程。
我建议Java Concurrency in Practice,无论你的知识水平如何,都很好http://www.javaconcurrencyinpractice.com/
使用Java的全部意义在于,您不需要了解线程如何工作的大部分细节等。如果您学习了许多不使用的东西,您可能会忘记它。 ;)
答案 2 :(得分:1)
在多线程程序中,Volatile是有意义的,在单个处理器或多个处理器上运行这些线程并没有什么区别。 volatile关键字用于告诉JVM(以及它使用的Java内存模型)它不应该使用此关键字重新排序或缓存变量的值。这保证了使用volatile变量的Thread永远不会看到该变量的陈旧版本。
答案 3 :(得分:1)
没有。 Volatile用于支持并发。在某些情况下,可以使用它而不是同步。
Brian Goetz的这个article确实让我理解volatile
。它有几个使用volatile
的例子,它解释了它可以在什么条件下使用。