Chapter 1-3. Sequentially Consistency
資料競爭與順序一致性的保證
當程式未正確同步時, 就會存在資料競爭(Data Race). JMM Spec對資料競爭的定義如下:
在一個執行緒中寫一個變數
在另一個執行緒讀同一個變數
且寫和讀都沒有通過同步來排序
當程式中存在資料競爭時, 程式的執行往往產生違反直覺的結果(前一章節的範例就是這樣). 若一個多執行緒程式能夠正確地同步, 這個程式就是一個沒有資料競爭的程式.
JMM對正確同步的多執行緒程式之記憶體一致性做了以下保證:
若程式是正確同步的, 程式的執行將具有順序一致性(Sequentially Consistency) -- 即程式的執行結果與該程式在順序一致性記憶體模型中的執行結果相同(這對開發者來說是一個極強的保證). 此處的同步指的是廣義上的同步, 包括對常用同步語意(lock, volatile與final)的正確使用.