Java - 使用volatile只在多处理器系统中有意义吗?

时间:2011-01-05 17:05:52

标签: java multithreading operating-system multiprocessing volatile

使用volatile只在多处理器系统中有意义。这是错的吗?

我正在努力学习线程编程,所以如果你知道任何好的文章/ pdf ...我喜欢那些提到操作系统如何工作的东西,而不仅仅是语言的语法。

4 个答案:

答案 0 :(得分:10)

没有。易失性可用于多线程应用程序。这些可能会或可能不会在多个处理器上运行。

答案 1 :(得分:8)

volatile用于确保所有线程都看到相同的数据副本。如果只有一个线程读/写字段,则不需要是volatile。它会工作得很好,只是有点慢。

在Java中,您对处理器体系结构的了解并不多,通常您会谈到线程和多线程。

我建议Java Concurrency in Practice,无论你的知识水平如何,都很好http://www.javaconcurrencyinpractice.com/

使用Java的全部意义在于,您不需要了解线程如何工作的大部分细节等。如果您学习了许多不使用的东西,您可能会忘记它。 ;)

答案 2 :(得分:1)

在多线程程序中,Volatile是有意义的,在单个处理器或多个处理器上运行这些线程并没有什么区别。 volatile关键字用于告诉JVM(以及它使用的Java内存模型)它不应该使用此关键字重新排序或缓存变量的值。这保证了使用volatile变量的Thread永远不会看到该变量的陈旧版本。

有关详细信息,请参阅Java内存模型上的this链接。或者this一个关于易失性的信息。

答案 3 :(得分:1)

没有。 Volatile用于支持并发。在某些情况下,可以使用它而不是同步。

Brian Goetz的这个article确实让我理解volatile。它有几个使用volatile的例子,它解释了它可以在什么条件下使用。