程序员

Java - Happens-before relationsh

2017-06-07  本文已影响0人  holysu

Happens-before 关系是对在一个线程内执行的操作在另一个线程内的操作的可见性保证。

Happens-before 定义程序中所有操作的偏序关系。为了保证操作 Y 的执行线程能观察到操作 X 的结果(不管 X 和 Y 是否发生在不同的线程内),就必须在 X 和 Y 之间存在 Happens-before 关系。如果在两个操作之间缺少 happens-before 顺序,那么 JVM 会任意地对操作进行重排序(JIT 编译优化)。

Happens-before 不仅仅是在时序上对操作进行重排序,它也是对内存读写顺序的保证。两个线程执行内存的读写操作可以在时间上对相互间的操作保持一致,但是可能不能一致地观察到彼此的改变(内存一致性错误),除非它们之间存在 happens-before 关系。

那如何建立 happens-before 关系呢?

以下是 happens-before 的规则:

补充

摘自《java并发编程实战》

上一篇 下一篇

猜你喜欢

热点阅读