JMM中的Happens-Before原则

Posted ssl-bl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JMM中的Happens-Before原则相关的知识,希望对你有一定的参考价值。

??在java内存模型中,happens-before应该理解为:前一个操作的结果,可以被后续的操作获取,即内存可见性。
??为了解决多线程的内存可见性问题,就提出了happens-before原则,让线程之间遵守这些原则,同时对编译器的优化也进行了一定的约束。
??以下是原则内容:

1、程序次序规则

??在一个线程内,一段代码的执行结果是有序的。依然会有指令重排,但是不论怎么重排序,结果都是按照代码顺序生成的不会变。

2、管程锁定规则

??无论在单线程环境还是多线程环境,对于同一个锁来说,一个线程对这个锁解锁之后,另一个线程获取了这个锁,则它能看到前一个线程的操作结果。

3、volatile变量规则

??如果一个线程先去写一个volatile变量,然后一个线程去读这个变量,那么这个写操作的结果一定对读的这个线程可见。

4、线程启动规则

??在主线程A执行过程中,启动子线程B,那么线程A在启动子线程B之前对共享变量的修改结果对线程B可见。

5、线程终止规则

??在主线程A执行过程中,子线程B终止,那么线程B在终止之前对共享变量的修改结果在线程A中可见。

6、线程中断规则

??对线程interrupt()方法的调用先行发生于被中断线程代码检测到中断事件的发生,可以通过Thread.interrupted()检测到是否发生中断。

7、传递性规则

??就是happens-before原则具有传递性,即A happens-before B , B happens-before C,那么A happens-before C

8、对象终结规则

??就是一个对象的初始化的完成,也就是构造函数执行的结束一定 happens-before它的finalize()方法

以上是关于JMM中的Happens-Before原则的主要内容,如果未能解决你的问题,请参考以下文章

聊聊Java happens-before原则

Juc11_Java内存模型之JMM八大原子操作三大特性读写过程happens-before

Juc11_Java内存模型之JMM八大原子操作三大特性读写过程happens-before

Android-JMM内存模型-指令重排-Happens-Before原则-volatile-lock指令-内存屏障

Android-JMM内存模型-指令重排-Happens-Before原则-volatile-lock指令-内存屏障

并发编程之happen-before原则