Java中的关键字volatile是否强制在单核机器上进行内存同步?

时间:2013-09-30 16:27:41

标签: java concurrency volatile memory-barriers

如果我理解正确,volatile会导致内存屏障,使本地内存与主内存同步。这在多核机器上非常有用。

当多线程应用程序在单核计算机上运行时,是否会发生此内存同步?

2 个答案:

答案 0 :(得分:3)

  

当多线程应用程序在单核计算机上运行时,是否会发生此内存同步?

是。 volatile会导致读取和/或写入内存屏障,并在另一个线程访问同一volatile字段时确保“之前发生”关系。见this tutorial。它确保将对本地CPU高速缓存的更改写入主内存,并且对主内存的更改将使任何CPU高速缓存页无效。

这在单处理器盒上不那么重要,因为只需要担心一个CPU缓存。但是,重要的是要认识到volatile的“先发生”保证仍然很重要。它们可以防止即使只有一个CPU因为多个线程的时间切片而可能发生的竞争条件。

答案 1 :(得分:1)

  

当多线程应用程序在单核计算机上运行时,是否会发生此内存同步?