一篇講Java指令重排和內存可見性的好文

在這裏:html

http://tech.meituan.com/java-memory-reordering.htmljava

 

指令重排和內存可見性(緩存不一致)是兩個不一樣的問題。緩存

volatile關鍵字太強,即阻擋指令重排,又保證內存一致性。性能

unsafe.putOrderedXXX()只阻擋指令重排,不保證內存一致性。可是性能比volatile好。本文介紹了一種它的適用場景——須要確保寫入B以前A必定已經寫入完成了,可是不須要寫A和B的結果當即被另外一線程看見,則適用它。線程

相關文章
相關標籤/搜索