JMM

作者: OldRumble | 来源:发表于2019-01-29 13:27 被阅读0次

    内存区域

    CPU与内存的交互.png JVM工作概念图.png 理解本地内存.png 存储金字塔.png 内存区域.png

    happends-before
    网上有很多写的不太准确的博客,说happends-before是“先于什么什么执行”,真正的理解应该是“xx对xx可见”的意思,即使有happends-before的关系,仍然无法保证执行的顺序,所以并发情况下,还需要一些锁或者Auto变量来保证执行顺序。

    程序次序法则:线程中的每个动作A都happends-before于该线程中的每一个动作B,其中,在程序中,所有的动作B都出现在动作A之后。
    监视器锁法则:对一个监视器锁的解锁happens-before于每一个后续对同一个监视器锁的加锁。
    volatile变量法则:对volatile域的写入操作happends-before于每一个后续对同一域的读操作。
    线程启动法则:在一个线程里,对Thread.start的调用会happends-before于每一个启动线程中的动作。
    线程终结法则:线程中的任何动作都happends-before于其他线程检测到这个线程已经终结,或者从Thread.join 调用中成功返回,或者Thread.isAlive返回false.
    中断法则:一个线程调用另一个线程的interrupt.happens-before于被中断的线程发现中断。(通过跑出interruptedException,或者调用isInterrupted和interrupted).
    终结法则:一个对象的构造函数的结束happends-before于这个对象finalizer的开始。
    传递性:如果A happens-before于B, 且B happends-before 于C, 则A happens-before 于C。
    

    相关文章

      网友评论

          本文标题:JMM

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