java内存模型浅谈

  • 并发编程模型的分类

    • 命令式编程中,线程之间通信方式有两种:共享内存和消息传递。
    • 在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。
    • 在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信。
    • 同步是指程序用于控制不同线程之间操作发生相对顺序的机制。(即串行化线程对主内存的操作)
    • 在共享内存并发模型里,同步是显式进行的。程序员必须显式指定某个方法或某段代码需要在线程之间互斥执行。
    • 在消息传递的并发模型里,由于消息的发送必须在消息的接收之前, 因此同步是隐式进行的。
    • Java 的并发采用的是共享内存模型,Java 线程之间的通信总是隐式进行,整个通信过程对程序员完全透明。如果编写多线程程序的 Java 程序员不理解隐式进行的线程之间通信的工作机制,很可能会遇到各种奇怪的内存可见性问题。
  • 主内存与工作内存

    • Java内存模型规定了所有的变量都存储在主内存中。
    • 每条线程有自己独自的工作内存,工作内存中保存了该线程所使用到变量的主内存副本拷贝。因此,线程对变量的所有操作都必须在工作内存中进行,不可直接操作主内存的变量。所以,不同线程之间也无法直接访问对方的工作内存变量,线程间的变量值的传递需要通过主内存来完成。
    • 线程、工作内存与主内存的交互图线程、工作内存与主内存的交互图
  • 参考

    • 深入理解Java内存模型
    • 深入理解Java虚拟机
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章