美文网首页
指令重排(Happens-Before法则)

指令重排(Happens-Before法则)

作者: clarityblack | 来源:发表于2016-04-10 14:20 被阅读0次

1.什么是指令重排

程序指令的执行顺序有可能和代码的顺序不一致,这个过程就称之为指令重排。

2.指令重排的作用

JVM能根据处理器的特性,充分利用多级缓存,多核等进行适当的指令重排序,使程序在保证业务运行的同时,充分利用CPU的资源,发挥最大的性能!

由于指令重排的特性,为了保证程序在多线程的条件下运行结果能够与单一线程下一致,引入了Happens-Before规则。也就是说,Happens-Before规则主要是用来确保并发情况下数据的正确性。

3.Happens-Before的含义

如果动作B要看到动作A的执行结果,无论A/B是否在同一个线程中,那么A/B必须满足happens-before规则。

4. happens-before规则

1)如果ActionA和ActionB属于同一个线程,那么就说明ActionA happens-before ActionB。
2)如果ActionA是unlock操作,而ActionB是lock操作,那么ActionA happens-before ActionB。
3)如果A是对volatile变量的写操作,ActionB是对同一个变量的读操作,那么ActionA happens-before ActionB。
4)线程的启动Action happens-before 该线程上的其他动作。
5)线程中任何Action都 happens-before 任何其他线程检测到该线程已经结束、Thread.join调用成功返回,Thread.isAlive返回false。
6)一个线程调用另一个线程的interrupt一定发生在另一个线程中断之前。
7)一个对象的构造函数结束一定发生在兑现finalizer之前。
8)ActionA发生在ActionB之前,ActionB发生在ActionC之前,则ActionA一定发生在ActionC之前。
ActionA happends-before ActionB,记作hb(ActionA,ActionB)。

5. JMMA(Java Memory Model Action)

Java模型动作,一个Action包含,变量读取、变量写、监视器枷锁、释放锁、线程启动(start)、线程等待(join)。

6. happens-before应用的例子

相关文章

  • 指令重排(Happens-Before法则)

    1.什么是指令重排 程序指令的执行顺序有可能和代码的顺序不一致,这个过程就称之为指令重排。 2.指令重排的作用 J...

  • 指令重排序及Happens-before法则

    接指令重排序对主存的一次访问一般花费硬件的数百次时钟周期。处理器通过缓存(caching)能够从数量级上降低内存延...

  • 并发名词解析

    流水线 中断 指令重排 三者关系 happens-before:线程内顺序语义,volatile变量:写先于读,锁...

  • volatile讲解以及实现原理

    关键知识点:happens-before原则,JVM指令重排序,主存和工作内存 本文基于已经理解了Java内存模型...

  • Java小白系列(七):Java Happens-Before规

    一、前言 Java Happens-Before是一组规则,来管理JVM和CPU如何通过指令重排来提升性能。通过调...

  • 3.指令重排序 happens-before

    指令重排序 happens-before 在这个小结里面重点讨论原子操作的原理和设计思想。 由于在下一个章节中会谈...

  • JMM内存模型之happens-before

    JMM把happens-before 要求禁止的重排序分为了下面两类。 会改变程序执行结果的重排序。 不会改变程序...

  • Java笔记1--volatile&CAS&集合

    volatile保证有序性(禁止指令重排) volatile总结 volatile实现禁止指令重排优化,从而避免多...

  • 概述+内存模型+Happens-Before 规则

    如果重排序之后的结果,与按照happens-before关系来执行的结果一致,那么这种重排序并不非法(也就是说,J...

  • Java 并发模型

    在之前的文章中,我们了解到了计算机为什么会出现指令重排、指令重排引起的问题、为了解决指令重排而引入的缓存一致性和内...

网友评论

      本文标题:指令重排(Happens-Before法则)

      本文链接:https://www.haomeiwen.com/subject/svbblttx.html