happens-before

happens-before是JMM最核心的概念
 

happens-before字面翻译过来就是先行发生,A happens-before B 就是A先行发生于B?

不准确!在Java内存模型中,happens-before 应该翻译成:前一个操作的结果可以被后续的操作获取。讲白点就是前面一个操作把变量a赋值为1,那后面一个操作肯定能知道a已经变成了1。

happens-before规则
1)程序顺序规则:一个线程中,按照程序的顺序,前面的操作happens-before后续的任何操作,一个线程中的每个操作,happens-                                 before于该线程中的任意后续操作。
2)管程中的锁规则 / 监视器锁规则:对一个锁的解锁,happens-before于随后对这个锁的加锁。
3)volatile变量规则:对一个volatile域的写,happen-before于任意后续对这个volatile域的 读。
4)传递性:如果A happens-before B,且B happens-before C,那么A happens-before C。
5)start()规则:如果线程A执行操作ThreadB.start()(启动线程B),那么A线程的 ThreadB.start()操作happens-before于线程B中                            的  任意操作。
6)join()规则:如果线程A执行操作ThreadB.join()并成功返回,那么线程B中的任意操作 happens-before于线程A从ThreadB.join()                            操作成功返回。

你可能感兴趣的:(happens-before)