Java 内存模型

Java 内存模型规范了 JVM 如何提供按需禁用缓存和编译优化的方法。具体来讲,这些方法包括 volatile、synchronized 和 final 三个关键字,以及六项 Happens-Before 规则。缓存

Happens-Before的7个规则:markdown

(1).程序次序规则:在一个线程内,按照程序代码顺序,书写在前面的操做先行发生于书写在后面的操做。准确地说,应该是控制流顺序而不是程序代码顺序,由于要考虑分支、循环等结构。

(2).管程锁定规则:一个unlock操做先行发生于后面对同一个锁的lock操做。这里必须强调的是同一个锁,而"后面"是指时间上的前后顺序。

(3).volatile变量规则:对一个volatile变量的写操做先行发生于后面对这个变量的读操做,这里的"后面"一样是指时间上的前后顺序。

(4).线程启动规则:Thread对象的start()方法先行发生于此线程的每个动做。

(5).线程终止规则:线程中的全部操做都先行发生于对此线程的终止检测,咱们能够经过Thread.join()方法结束、Thread.isAlive()的返回值等手段检测到线程已经终止执行。

(6).线程中断规则:对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生,能够经过Thread.interrupted()方法检测到是否有中断发生。

(7).对象终结规则:一个对象的初始化完成(构造函数执行结束)先行发生于它的finalize()方法的开始。

Happens-Before的1个特性:传递性。app

相关文章
相关标签/搜索