在這裡: http://tech.meituan.com/java-memory-reordering.html 指令重排和記憶體可見性(緩存不一致)是兩個不同的問題。 volatile關鍵字太強,即阻擋指令重排,又保證記憶體一致性。 unsafe.putOrderedXXX()只阻擋指令重排,不保證內 ...
在這裡:
http://tech.meituan.com/java-memory-reordering.html
指令重排和記憶體可見性(緩存不一致)是兩個不同的問題。
volatile關鍵字太強,即阻擋指令重排,又保證記憶體一致性。
unsafe.putOrderedXXX()只阻擋指令重排,不保證記憶體一致性。但是性能比volatile好。本文介紹了一種它的適用場景——需要確保寫入B之前A一定已經寫入完成了,但是不需要寫A和B的結果立即被另一線程看見,則適用它。