简单理解happens-before概念:
若 A操作 happens-before B操作,那么意味着,A操作的结果将对B操做来说是可见的。程序运行上,A操作并不一定发生在B操作之前,因为可能出现重排序的问题。即使出现重排序,但是由于happens-before的原因,并不会影响结果。
happens-before原则保证正确同步的程序之间的结果。
happens-before规则:
对于volatile变量,写操作 happens-before与任意 后续 的读操作。注意是后续的,不代表写操作一定发生在读操作之前。
单线程内,一个操作总是happens-before于后续的操作。
对于一个锁的解锁,happens-before于后续对这个锁的加锁。
happens-before支架存在传递性。
注意上面加粗的 后续 一词,表示happens-before之间的关系也是随机的,并不代表写操作就一定发生在读操作之前,
happens-before关系只是保证前面的操作对于后续的操作来说,结果 是可见的。
happens-before关系对于单线程,多线程一样适用。