文章目录

  • 前言
  • 一、JMM模型
  • 二、JAVA内存模型数据同步8大原子操作
  • 三、模型解读

前言

JMM是一种java内存模型,是一种不存在的概念和约定。

JMM有以下约定:
1.线程解锁前,必须把共享变量刷回主存。
2.线程加锁前必须读取主存中的值到工作内存中。
3.加锁和解锁必须是同一把锁。

提示:以下是本篇文章正文内容,下面案例可供参考

一、JMM模型

JMM模型示意图:

二、JAVA内存模型数据同步8大原子操作

lock(锁定):把一个变量标记为一条线程独占状态
unlock(解锁):把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定
read(读取):把主内存中的一个变量读取传输到线程的工作内存,以便随后load动作使用
load(加载):把read到线程工作内存的变量放入工作内存的变量副本中
use(使用):把线程工作内存中的一个变量值传递给执行引擎
assign(赋值):从执行引擎接收到的新值赋值给变量。返给工作内存
store(存储):把线程工作内存的一个变量值传递给主内存,以便后面的write使用
write(写入):把store到主内存的变量值赋值给变量

三、模型解读

上图是我在网上找到的一张JMM内存模型的图解,图中很明了地阐述了JMM的工作原理。
工作模型中分为主存和线程中的工作内存,平常线程不会直接从主存中操作变量值而是会把主存中的变量拷贝一份进入工作内存,线程操作的就是工作内存中的拷贝过来的变量。
比如线程1开始执行,这时候线程1开始读取主存中的intiFlag=FALSE,这时后就进行了read操作。然后线程1会把该变量信息拷贝到自己的工作内存中,执行load操作。等到线程1需要使用变量了就会从工作内存中取,执行use操作。图中的线程1到这一步就停止了,是因为线程2加了锁,假如线程1之后吧intiFlag=FALSE改成了initFlag=True,那么之后线程1就会把赋值到工作内存,此时工作内存的intiFlag也变为true。继续往下执行的话会像线程2一样把线程工作内存的变量值传递给主内存进行store操作,之后write写入主存。

java内存模型——JMM理解相关推荐

  1. 全面理解Java内存模型(JMM)及volatile关键字

    [版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/72772461 出自[zejian ...

  2. Java并发编程:Java内存模型JMM

    简介 Java内存模型英文叫做(Java Memory Model),简称为JMM.Java虚拟机规范试图定义一种Java内存模型来屏蔽掉各种硬件和系统的内存访问差异,实现平台无关性. CPU和缓存一 ...

  3. java内存模型(JMM)和happens-before

    文章目录 重排序 Happens-Before 安全发布 初始化安全性 java内存模型(JMM)和happens-before 我们知道java程序是运行在JVM中的,而JVM就是构建在内存上的虚拟 ...

  4. JVM——Java内存模型(JMM)

    关注微信公众号:CodingTechWork,一起学习进步. 软硬件发展概述 Amdahl定律和摩尔定律 1)Amdahl定律:通过系统中并行化和串行化的比重来描述多处理器系统能获得的运算加速能力. ...

  5. Java内存模型(JMM)详解

    在Java JVM系列文章中有朋友问为什么要JVM,Java虚拟机不是已经帮我们处理好了么?同样,学习Java内存模型也有同样的问题,为什么要学习Java内存模型.它们的答案是一致的:能够让我们更好的 ...

  6. java 内存模型JMM解析

    java 内存模型JMM解析 一.CPU多核并发缓存架构解析    1.以往的内存读取    2.后来的内存读取 二.java内存模型实现原理    1.验证上图模型      1)案列代码      ...

  7. java基础—java内存模型(JMM)CPU架构、缓存一致性、重排序、JMM的实现、JMM保证可见性、有序性问题的详解

    java基础-JMM(CPU架构.JMM保证可见性.有序性) 文章目录 java基础-JMM(CPU架构.JMM保证可见性.有序性) CPU架构 说一说现在计算机存储器的结构层次 使用CPU缓存,会导 ...

  8. Java并发编程-Java内存模型(JMM)

    前言 在上一章 Java并发编程-Android的UI框架为什么是单线程的? 中笔者介绍了并发编程线程安全「三大恶」:「可见性」.「原子性」以及「有序性」 广义上来说,并发编程问题笔者归纳为:是由于后 ...

  9. Java 内存模型 JMM 详解

    转载自 Java 内存模型 JMM 详解 JMM简介 Java Memory Model简称JMM, 是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见性.是否可以重排序等问题的无关具体 ...

最新文章

  1. 如何 搭建 RMAN 备份平台
  2. 三星note5 android版本区别吗,三星Note5哪种颜色好看?三星Note5四种颜色区别对比图解...
  3. .NET 2.0 RC的一个Bug
  4. 写给笨蛋徒弟的学习手册(1)——完整C#项目中各个文件含义
  5. TCP服务器epoll的多种实现
  6. 基于MATLAB的图像压缩感知设计(含源文件)
  7. 操作系统学习笔记:内存管理
  8. 串口转发工具 串口屏调试神器 PC串口监视神器
  9. 禁用计算机端口,电脑如何关闭445端口
  10. 混沌系统与复杂网络控制,神经网络模型求最优解
  11. 使用 ExtendSim 进行国防、军事和安全系统建模
  12. java 运维系统_Java 应用运维
  13. Excel堆积柱形图制作过程
  14. Codeforces1436 A. Reorder
  15. Android在GoogleMap(百度地图)实现自定义指南针旋转与回正功能
  16. jq实现标签单选、多选功能
  17. 前端基础 HTML
  18. Java代码分析器(一): JDT入门
  19. 剑指offer55 二叉树的深度 捏软柿子
  20. angularjs2学习教程

热门文章

  1. IT专业人士:Windows 7部署的攻坚兵
  2. Redis 水滴石穿之(六)哨兵
  3. 视频教程-从零开始学BGP--【适用于思科CCNA、CCNP入门】-路由协议
  4. 交通信息工程课程设计
  5. 传智播客Java基础入门,浅谈JAVA开发规范与开发细节(上
  6. python下载m3u8视频_使用python 下载m3u8格式视频,并使用ffmpeg 合成视频
  7. Contos7下tomcat定时重启实现
  8. linux dev ram,fdisk -l 显示 16个ram磁盘/dev/ram0... /ram15
  9. linux降级安装补丁,Adobe Shockwave Player降级安装漏洞
  10. .NET Framework和.NET Core/.NET5/.NET6