happens-before
在JMM中,如果?个操作执?的结果需要对另?个操作可?,那么这两个操作之间必须要存在happens-before关系。
?
程序顺序规则
?
监视器锁规则
?
volatile变量规则
?个线程中的每个操作,happens-before于该线程中的任意后续操作。
对?个锁的解锁,happens-before于随后对这个锁的加锁。
对?个volatile域的写,happens-before于任意后续对这个volatile域的读。
?
传递性 如果A happens-before B,且B happens-before C,那么A happens-before C。
?
start()规则
如果线程
A执?操作ThreadB.start()(启动线程B),那么A线程的ThreadB.start()操作happens-before于线程B中
的任意操作。
如果线程
A执?操作ThreadB.join()并成功返回,那么线程B中的任意操作happens-before于线程A从ThreadB.join()
操作成功返回。
对线程interrupt?法的调?happens-before于被中断线程的代码检测到中断事件的发?。
?
join()规则
?
线程中断规则
?
对象终结规则
?个对象的初始化的完成,也就是构造函数执?的结束?定 happens-before它的finalize()?法。
按时ifserial 创造了一个幻觉:程序员在写单线程程序的代码时是按程序的顺序进行的
happens before在我们创建正确同步的多线程的代码时也创造了一个幻觉:正确同步的多线程程序是按照happens before规则来执行的
一个happens-before规则,可能对应着多个处理器的编译器处理器的规则

每个处理器允许重排序的类型都不同


