一篇讲Java指令重排和内存可见性的好文

在这里:

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

 

指令重排和内存可见性(缓存不一致)是两个不同的问题。

volatile关键字太强,即阻挡指令重排,又保证内存一致性。

unsafe.putOrderedXXX()只阻挡指令重排,不保证内存一致性。但是性能比volatile好。本文介绍了一种它的适用场景——需要确保写入B之前A一定已经写入完成了,但是不需要写A和B的结果立即被另一线程看见,则适用它。

 

posted @ 2016-08-19 16:30  Yijian  阅读(1637)  评论(0编辑  收藏  举报