先行发生原则Happens-before
int k = 1; //男人
int j = k; //女人
先行发生原则是Java内存模型中定义的两项操作之间的偏序关系,如果操作A先行发生于操作B,其实就是说在发生操作B之前,操作A所产生的影响能够被B观察到
简单来说:执行顺序的控制,后续代码可以监控到之前代码的所有操作
八大原则:
1.程序次序规则:
在一个线程内,按照代码的顺序,书写在前面的代码优先于发生书写在后面的代码
2.管程锁定原则:
一个unlock操作先行发生于后面对同一个锁的lock操作,注意是同一个锁
3.volatile原则:
对一个volatile变量的写操作先行发生于后面对该变量的读操作
4.线程启动原则:
Thread对象的start()方法优先于此线程的每一个动作
5.线程终止原则:
线程中所有的操作都优先发生于对此线程的终止
6.线程中断原则
对线程的interrupt()方法的调用先行发生于被中断线程的代码检测中断事件的发生 先中断再检测
7.对象终结原则:
一个对象的初始化(构造函数执行完毕)完成优先发生于它的finalize()方法的开始
8.传递性:
int a; //1
int b; //2
int c; //3
如果操作A先行发生于操作B,操作B先行发生于操作C,那么就可以得出来操作A优先发生于操作C