在Java5中之前雖然揮發性不允許揮發性變量之間重排序,但是卻允許波動和不同變量重排序,這就導致了很多出人意料結果。而Java5中之後揮發性變量和不同變量之間也不允許重排序才使得,各種意料結果得到解決(在Java的以前的內存模型當中沒有loadstore和loadload這類內存屏障導致揮發性變量可以和普通變量可以重排序,所以就產生了各種問題,而Java5中之後有了這類內存屏障所以揮發性和揮發性以及揮發性和普通變量之間不可以重排序(具體:普-V寫和V讀 - 普不可以重排序),加強了易揮發的語義,導致揮發性可以正確使用又因爲在86杯。禁止讀 - 讀,讀 - 寫,寫。 - 寫操作的重排序,所以各種內存屏障都可以忽略掉最後只剩下storeload這個內存屏障也就是我們最後看到的鎖定彙編指令),如下圖在Java5中之前使用揮發會導致錯誤