happens-before是用来指定两个操作之间的操作顺序,提供跨线程的内存可见性。
在Java内存模型中,如果一个操作的结果,需要对另外一个操作可见,那么这两个操作之间有happens-before关系;
happens-before规则如下:
1.程序顺序规则
单个线程中总是前一个操作结果happens-before 后续的线程的操作;之间得有数据依赖性
2.监视器锁规则
对于一个锁的解锁,总是happens-before 这个锁的加锁
3.volatile 变量规则
对于一个volatile 域的写,happens-before任何对这个volatile域的读
4.传递性
a happens-before b b happens c 则 a 一定happesn before c;
5.start规则
system.out.print("a");
new Thread(Runnable(){
run{}
}).start();
则打印语句 优先于 子线程的启动;
6.join 规则
join 和5 是反着的过程,这个貌似还没有搞明白;