美文网首页
《Java并发编程艺术》随笔(二)java内存模型

《Java并发编程艺术》随笔(二)java内存模型

作者: noexceptionsir | 来源:发表于2017-06-27 13:33 被阅读0次

    1、Java的并发采用的是共享内存模型,Java线程之间的通信总是隐式进行,整个通信过程对程序员完全透明。

    2、在Java中,所有实例域、静态域和数组元素都存储在堆内存中,堆内存在线程之间共享,局部变量,方法定义参数和异常处理器参数不会在线程之间共享,它们不会有内存可见性问题,也不受内存模型的影响。

    3、Java线程之间的通信由Java内存模型控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存,本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存、写缓冲区、寄存器以及其他的硬件和编译器优化。

    4、happens-before

    ·程序顺序规则:一个线程中的每个操作,happens-before于该线程中的任意后续操作。

    ·监视器锁规则:对一个锁的解锁,happens-before于随后对这个锁的加锁。

    ·volatile变量规则:对一个volatile域的写,happens-before于任意后续对这个volatile域的读。

    ·传递性:如果A happens-before B,且B happens-before C,那么A happens-before C。

    5、两个操作之间具有happens-before关系,并不意味着前一个操作必须要在后一个操作之前执行!happens-before仅仅要求前一个操作(执行的结果)对后一个操作可见,且前一个操作按顺序排在第二个操作之前。

    6、as-if-serial语义的意思是:不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不能被改变。

    7、程序顺序原则:
    1)A happens-before B。
    2)B happens-before C。
    3)A happens-before C。

    8、

    相关文章

      网友评论

          本文标题:《Java并发编程艺术》随笔(二)java内存模型

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