下文为自己学习笔记。
关键词理解:
JMM:java memory model java内存模型
int a=1;//A
int b=3;//B
int c=a*b;//C
在上边这段代码中,有A\B\C个语句
C依赖于A、B两个语句,所以Ahappens-before于C,Bhappens-before于C,但是A和B之间没有依赖关系,先执行A或者先执行B对程序结果没有影响。
总结happens-before规则是:如果A happens-before C,那么Java内存模型将向程序员保证——A操作的结果将对C可见,且A的执行顺序排在C之前。
hanppens-before规则
1、程序顺序规则:一个线程中的每个操作,happens-before于该线程中的任意后续操作。
2、监视器锁规则:对一个锁的解锁,happens-before于随后对这个锁的加锁。
3、volatile变量规则:与一个volatile域的写,happens-before于任意后续对这个volatile域的读。
4、传递性:如果Ahappens-beforeB,且Bhappens-beforeC,那么Ahappens-beforeC
5、start规则:如果线程A执行操作ThreadB.start()(启动线程B),那么A线程的ThreadB.start()操作happens-before与线程B中的任意操作。
6、join规则:如果线程A执行操作ThreadB.join()并成功返回,那么线程B中的任意操作happens-before于线程A从ThreadB.join()操作成功返回。