2011-08-20 59 views
9

不知写volatile变量将迫使JVM所有非volatile变量同步到内存中,因此,例如,将下面的代码会发生什么:写入volatile变量后会发生什么?

volatile int x; 
int y; 

y=5; 
x=10; 

x将被写入到存储器,但是y会发生什么?它会被写入内存吗?

+1

y没有声明为volatile ...? –

+1

不,有意故意将其声明为不稳定。问题是如果写入volatile变量意味着所有变量的内存屏障。 – Anonymice

+0

我认为这将取决于您的Java版本... –

回答

5

是的,在the Java Language Specification (third edition) -- in particular section 17.4.4的规则下 - 如果看到新值x的每个线程都会随后看到新值y,如果他们试图读取它。不读取x的线程不保证会受到影响。

但是,请注意,此保证不存在于JLS的第二版版本的内存模型中。在那里,易失性读取和写入对非易失性存储器访问的排序没有影响。

+1

对于所有无法将语言版本的版本映射到实际Java版本的人员:这意味着Henning所描述的从Java 1.5开始就是真实的; ) – Voo

相关问题