Volatile修飾的成員變量在每次被線程訪問時,都強迫從共享內(nèi)存中重讀該成員變量的值。而且,當(dāng)成員變量發(fā)生變化時,強迫線程將變化值回寫到共享內(nèi)存。這樣在任何時刻,兩
個不同的線程總是看到某個成員變量的同一個值。 Java語言規(guī)范中指出:為了獲得最佳速度,允許線程保存共享成員變量的私有拷貝,而且只當(dāng)線程進入或者離開同步代碼塊時才與
共享成員變量的原始值對比。 這樣當(dāng)多個線程同時與某個對象交互時,就必須要注意到要讓線程及時的得到共享成員變量的變化。 而volatile關(guān)鍵字就是提示VM:對于這個成員變量
不能保存它的私有拷貝,而應(yīng)直接與共享成員變量交互。 使用建議:在兩個或者更多的線程訪問的成員變量上使用volatile。當(dāng)要訪問的變量已在synchronized代碼塊中,或者為常量
時,不必使用。 由于使用volatile屏蔽掉了VM中必要的代碼優(yōu)化,所以在效率上比較低,因此一定在必要時才使用此關(guān)鍵字。 就跟C中的一樣 禁止編譯器進行優(yōu)化~~~~
posted on 2011-12-28 13:58
RoyPayne 閱讀(219)
評論(0) 編輯 收藏 所屬分類:
java并發(fā)