• 什么是JMM


    JMM(Java 内存模型)是 Java 平台定义的一种内存模型,它规定了 Java 程序中多线程并发访问共享内存的行为和规则。JMM 定义了线程如何与主内存和线程本地内存交互,以及如何通过同步机制来保证线程安全和可见性。

    JMM 主要关注以下几个方面:

    1. 主内存(Main Memory):主内存是所有线程共享的内存区域,包含了所有的共享变量。所有的变量都存储在主内存中,线程之间可以通过读写共享变量来进行通信。

    2.  线程本地内存(Thread Local Memory):每个线程都有自己的线程本地内存,它包含了该线程使用到的变量的副本。线程在执行过程中,会把主内存中的共享变量拷贝到线程本地内存中进行操作,操作完成后再将结果刷新回主内存。

    3. 内存间的交互:JMM 定义了线程与主内存之间的交互规则。当一个线程对共享变量进行读操作时,必须先从主内存中获取最新的值;当一个线程对共享变量进行写操作时,必须将修改后的值刷新回主内存。这样可以保证不同线程之间对共享变量的操作是可见的。

    4. 原子性、可见性和有序性:JMM 定义了对共享变量的操作具备原子性、可见性和有序性。原子性指一个操作是不可中断的,要么全部执行成功,要么完全不执行;可见性指一个线程对共享变量的修改对其他线程是可见的;有序性指程序的执行结果与程序中的顺序一致。

    JMM 通过使用同步机制(如 synchronizedvolatileLock 等)来保证线程之间的协调和同步,以及对共享变量的一致性访问。通过遵循 JMM 的规则,可以编写正确、高效且线程安全的多线程程序。

    需要注意的是,JMM 只规定了程序中多线程访问共享内存的行为和规则,而不关注底层的硬件和操作系统的实现。具体的 JVM 实现会根据 JMM 的规范来定义内存模型的具体行为和实现细节。

     

    八种操作: 

     

     

     

    问题:程序不知道主内存的值已经被修改过了,所以需要引入Volatile 

  • 相关阅读:
    5. spark 参数问题
    用vue实现pdf预览
    无胁科技-TVD每日漏洞情报-2022-8-15
    牛客网刷题——JAVA
    使用chat GPT 生成一个js 生成天数的方法
    C# 控制台设置
    async-validator 源码学习笔记(三):rule
    设计模式-原型模式
    命令行参数、环境变量
    大模型从入门到应用——LangChain:代理(Agents)-[工具(Tools):多输入工具和工具输入模式]
  • 原文地址:https://blog.csdn.net/Li2992973708/article/details/132620506