volatile關鍵字用來保證有序性和可見性。
有序性:
這跟Java的內存模型有關係。我們寫的代碼不一定是按照我們的書寫的順序來執行,編譯器會做重排序,這樣做的好處是減少了流水線的阻塞。
volatile變量規則是:對一個變量的寫操作先行發生於後面的讀操作;有序性是通過插入內存屏障來保證。
可見性:
首先Java的內存模型分爲主內存和工作內存,線程A將變量i從主內存讀取到工作內存中,並做+1操作,此時並沒有將i刷新到主內存中。線程B讀取到的i還是舊值。加了volatile關鍵字後彙編指令會多Lock前綴,保證了內存可見性。