分享

JMM java内存模型

 一本正经地胡闹 2019-12-03

内存区域

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。


作者:OldRumble
链接:https://www.jianshu.com/p/e92c0a471719

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多