2011-08-20 33 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

相關問題