先行发生关系(happens-before)

分三个层次吧:
第一层次:单个对象或单个方法层次
a.程序次序规则:可以理解为某一线程中的run方法执行代码,控制流书写在前的一定先行于书写在后的,当然,是广义的书写,考虑循环及判断
b.管程锁定规则:可以理解为被锁的(比如synchronized锁定的)程序块中,执行时间在前的先行于执行时间在后的
c.volatile规则:对一个volatile的写执行先行于时间上位于后面的对这个变量的读操作
d.对象的构造方法先行于finalize的开始
注意:a指的是书写次序、b和c指的是时间次序,这个是不一样的,a指单线程内,而b和c可以看作不同线程内执行的时间前后

第二层次:线程层次:
e.线程启动先行于线程内的执行
f.线程执行先行于线程终止
g.对线程interrupt()方法的调用先行于中断事件的发生

第三个层次:传递原则:
若A先行于B,B先行于C,则A先行于C

符合先行发生关系的逻辑由系统保证多线程的逻辑同步,不需要自己控制

猜你喜欢

转载自blog.csdn.net/kcstrong/article/details/79932157