java并发编程之happens-before原则,先行发生原则

下文为自己学习笔记。

关键词理解:

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()操作成功返回。

猜你喜欢

转载自blog.csdn.net/haoshaoxing/article/details/83030994