java内存模型是一个抽象的概念,是围绕着多线程通信以及与其相关的一系列特性而建立的模型。是一组需要各个jvm的实现来遵循JMM规范,以便开发者利用这些规范,更方便的开发多线程程序。主要保证了多线程之间共享内存部分的可见性和有序性,内存模型定义了共享内存中多线程读写行为的规范。

    JMM读写内存规范

    JMM定义一套读写内存数据的规范,屏蔽了一级缓存二级缓存的概念,JMM抽象出主内存和工作内存的概念,主内存指线程共享内存,工作内存则指线程独占内存。
    每个线程只能够直接接触到工作内存,无法直接操作主内存,而工作内存中所保存的正是主内存的共享变量的副本,主内存和工作内存之间的通信是由 JMM 控制的。

    主内存和工作内存的关系JMM 有以下规定
    (1)所有的变量都存储在主内存中,同时每个线程拥有自己独立的工作内存,而工作内存中的变量的内容是主内存中该变量的拷贝;
    (2)线程不能直接读 / 写主内存中的变量,但可以操作自己工作内存中的变量,然后再同步到主内存中,这样,其他线程就可以看到本次修改;
    (3) 主内存是由多个线程所共享的,但线程间不共享各自的工作内存,如果线程间需要通信,则必须借助主内存中转来完成。

    点击查看【processon】


    为什么需要JMM(Java Memory Model)

    • c语言不存在内存模型的概念
    • 依赖于处理器,不同处理器结果不一样
    • 无法保证并发安全
    • 需要定义一个标准,让多线程的运行结果可预期