Java内存模型-Java Memory Model(JMM)-可见性、原子性、有序性
5. Java内存模型之JMM
5.1 先从大场面试开始
你知道什么是Java内存模型JMM吗?
JMM和volatile他们两个之间的关系?
JMM没有那些特征或者它的三大特征是什么?
为什么要有JMM,它为什么出现?作用和功能是什么?
happens-before先行并发原则你有了解过吗?
5.2 计算机硬件存储体系


5.3 Java内存模型Java Memory Model
JMM(Java内存模型Java Memory Model)本身是一种抽象的概念并不真实存在,它仅仅描述的
是一组约定或规范,通过这组规范定义了程序中(尤其是多线程)各个变量的读写访问方式并决定
一个线程对共享变量的写入以及如何变成对另一个线程可见,关键技术点都是围绕多线程的原子
性、可见性和有序性展开的。
能干吗?
-
通过JMM来实现线程和主内存之间的抽象关系
-
屏蔽各个硬件平台和操作系统的内存访问差异以实现让Java程序再各种平台下都能达到一致性的内存访问效果。

5.4 JMM规范下三大特性
可见性:是指当一个线程修改了某一个共享变量的值,其他线程是否能够立即知道该变更,
JMM规定了所有的变量都存储在主内存中。

系统中主内存共享变量数据修改被写入的时机是不确定的,多线程并发下很可能出现“脏读”,所以
每个线程都有自己的工作内存,线程自己的工作内存中保存了该线程使用到的变量的主内存副本拷
贝,线程对变量的所有操作(读取、赋值等)都必须在线程自己的工作内存中进行,而不能够直接
写入主内存中的变量,不同线程之间也无法直接访问对方工作内存中的变量,线程间变量值的传递
均需要通过主内存来完成。
但是如果不加原子性,会出现“线程脏读”

原子性:指一个操作是不可被打断的,即多线程环境下,操作不能被其他线程干扰
有序性:对于一个线程的执行代码而言,我们总是习惯性地认为代码的执行总是从上到下,有序执
行。但为了提升性能,编译器和处理器通常会对指令序列进行重新排序。Java规范规定JVM线程内
部维持顺序化语义,即只要程序的最终结果与它顺序话执行的结果相等,那么指令的执行顺序可以
与代码顺序不一致,此过程叫指令的重排序。

5.5 JMM规范下多线程对变量的读写过程
由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有的地方成
为栈空间),工作内存是每个线程的私有数据区域,而Java内存模型中规定所有变量都存储在主内
存,主内存是共享内存区域,所有线程都可以访问,但线程对变量的操作(读写赋值等)必须在工
作内存中进行,首先要将变量从主内存拷贝到线程自己的工作内存空间,然后对变量进行操作,操
作完成后再将变量写回主内存,不能直接操作主内存中的变量,各个线程中的工作内存存储着主内
存中的变量副本拷贝,因此不同的线程无法访问对方的工作内存,线程间的通信(传值)必须通过
主内存来完成,其简要访问过程如下图:

JMM定义了线程和主内存之间的抽象关系:
- 线程之间的共享变量存储在主内存中(从硬件角度讲就是内存条)
- 每个线程都有一个自己的本地工作内存,本地工作内存中存储了该线程用来读写共享变量的副本(从硬件角度来说就是CPU的缓存)
总结:

相关文章:
Java内存模型-Java Memory Model(JMM)-可见性、原子性、有序性
5. Java内存模型之JMM 5.1 先从大场面试开始 你知道什么是Java内存模型JMM吗? JMM和volatile他们两个之间的关系? JMM没有那些特征或者它的三大特征是什么? 为什么要有JMM,它为什么出现?作用和功能是什么…...
基于Springboot实现在线答疑平台系统项目【项目源码+论文说明】
基于Springboot实现在线答疑平台系统演示 摘要 社会的发展和科学技术的进步,互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大师生的喜爱,也逐渐进入了每个学生的使用。互联网具有便利性,速度快,效率高,成本…...
前端工程化知识系列(1)
目录 1. 什么是前端工程化,以及它为前端开发带来了哪些好处?2. 你使用过哪些版本控制系统?描述一下你在团队中如何处理代码合并和冲突解决的经验。3. 什么是Git,它的工作原理是什么?可以解释一下常用的Git命令吗&#…...
xml文件报错 ORA-00907: 缺失右括号
原来的sql 更改之后 加一个select * from ()...
VScode platformio的使用
一、platformio 工程创建 打开vscode界面你会发现左下多了个家的小图标,点击这里就可以进入platformio。 在右侧Quick Access栏中,有4个选项。可以看得出来,我们这里直接点击创建一个新的工程。 点击New Project打开project配置界面&#x…...
transformer_01
一、传统RNN存在的问题 1.序列前序太长,每个xi要记住前面的特征,而且一直在学,没有忘记,可能特征不能学的太好 2.串行,层越多越慢,难以堆叠很多层; 3.只能看到过去,不能看到未来 搞…...
JavaSE入门---认识方法
文章目录 什么是方法?方法定义实参和形参的关系没有返回值的方法 方法重载方法签名 什么是方法? 在编程中某段功能的代码可能频繁使用到,如果在每个位置都重新实现一遍,会有一些缺点,比如: 使程序变得繁琐…...
编译[Bug]——too few arguments for template template parameter “Tuple“ detected
项目场景: 当使用高版本的cuda去安装低版本pytorch,并且编译用低版本pytorch写的cuda算子时,或者说是VS的版本过高如2022和2019,都有可能会出现某个.h文件或者.c文件报错,如: error: too few arguments f…...
网工内推 | 南天软件,base北京,需持有CCIE认证,最高25k
01 北京南天软件有限公司 招聘岗位:IPT运维工程师 职责描述: 负责客户Cisco语音网络IPT ,CUCM的日常运维,扩容和项目支持,支持路由交换,无线等项目,实施工作以及相关实施文档。 任职要求: 1、…...
Unity有限状态机的简易实现
本人嘴笨,不会说。 该代码实现一个功能较为齐全的有限状态机,可用于大部分的应用场景。 大致实现几个功能 状态更新状态转换状态消息处理全局状态转换和反转状态(转换为前一个状态) 代码分为 状态类状态管理类枚举(…...
什么是NetApp的DQP和如何安装DQP?
首先看看什么是DQP,DQPDisk Qualification Package,文字翻译就是磁盘验证包。按照NetApp的最佳实践,要定期升级DQP包,保证对最新磁盘和磁盘扩展柜的兼容。 本文主要介绍7-mode下如何升级DQP,至于cluster mode另外文章…...
Vue之Vue的介绍安装开发实例生命周期钩子
博主心得: keyup必须与change一起使用v-on.click可以直接写成clickclick“setVal”里的setVal换成数字之后有惊喜VS Code是真的狗,一些报错根本不会直接显示总结:VS code太狗了 1.vue介绍 1.1 什么是vue vue是一个构建用户界面UI的渐进式jav…...
【计网】计算机网络概述
目录 一、计算机网络的概念 二、计算机网络的组成 1、从组成部分上看 2、从工作方式上看 3、从功能组成上看 三、计算机网络的功能 1、数据通信 2、资源共享 3、分布式处理 4、提高可用性 5、负载均衡 四、计算机网络的分类 1、按分布范围 1.广域网 2.城域网 3.…...
初识Java 14-1 测试
目录 测试 单元测试 JUnit 测试覆盖率 前置条件 断言 Java提供的断言语法 Guava提供的更方便的断言 契约式设计中的断言 DbC 单元测试 Guava中的前置条件 本笔记参考自: 《On Java 中文版》 测试 ||| 如果没有经过测试,代码就不可能正常工作…...
react常用的hooks有哪些?
React常用的Hooks包括以下几种: 1.useState:用于在函数组件中创建和管理状态。它返回一个数组,第一个值是当前状态的值,第二个值是更新状态的函数。 使用时,首先通过解构赋值获取状态值和更新函数,并设置初…...
Nacos config 配置中心详解
目录 一、Nacos启动 1.预备环境准备 2.下载编译后压缩包方式 3. 启动服务器 二、 配置管理 多配置格式编辑器 编辑DIFF 示例代码 监听者查询 配置的版本及一键回滚 命名空间管理 登录管理 修改默认用户名/密码方法 关闭登录功能 会话时间 三、启动配置管理 添加依赖:…...
C++ UDP通信
#pragma once #ifndef XUDP_H #define XUDP_H#ifdef WIN32 #include <windows.h> #define socklen_t int #else #include <arpa/inet.h> #define closesocket close //替换close函数 #include <unistd.h>#include<iostream> #endifclass XUdp { pub…...
自由程序员想接私活?那你还不得知道这几个接单平台!最后一个就是宝藏!!
相信喜欢搞钱的程序员都知道,平常在平台上接点私活,利用闲暇时间接单是搞钱的常用套路,可是你确定你选对平台了吗?不管你是刚准备接单的小白,还是已经干了一段时间的老油条,都建议你看完本期文章࿰…...
二叉树与递归的相爱相杀
数据结构之二叉树 一、基于二叉树的基础操作1.二叉树的构建2.二叉树的遍历①前序遍历(深度遍历)②中序遍历③后序遍历④层序遍历判断一棵二叉树是否是完全二叉树(基于层序遍历的思想) 3.二叉树的数量问题①求二叉树结点个数②求二…...
Docker 安装 reids
docker run -itd --name myredis -p 6379:6379 redis --requirepass “123456” --restartalways --appendonly yes...
OpenClaw+千问3.5-9B数据清洗:Excel复杂表格自动化处理
OpenClaw千问3.5-9B数据清洗:Excel复杂表格自动化处理 1. 为什么需要自动化Excel处理 每次面对上百行的Excel表格时,我总会在合并单元格和异常值上浪费大量时间。作为数据分析师,最痛苦的莫过于收到业务部门发来的"美化版"报表—…...
如何通过 proc-macro-workshop 快速掌握 Rust 代码生成技术:终极完整指南
如何通过 proc-macro-workshop 快速掌握 Rust 代码生成技术:终极完整指南 【免费下载链接】proc-macro-workshop Learn to write Rust procedural macros [Rust Latam conference, Montevideo Uruguay, March 2019] 项目地址: https://gitcode.com/gh_mirrors/…...
vscode-react-native完整功能解析:Android、iOS、Expo多平台支持终极指南
vscode-react-native完整功能解析:Android、iOS、Expo多平台支持终极指南 【免费下载链接】vscode-react-native VSCode extension for React Native - supports debugging and editor integration 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-react-nat…...
SEO_资深运营揭秘,长期稳定排名的SEO策略介绍
SEO策略的核心要素:内容质量 在资深运营者的经验中,内容质量始终是SEO策略的核心要素。一个优质的网站,首先需要提供高质量、有价值的内容,这不仅能吸引用户,还能提升网站在搜索引擎中的排名。长期稳定的SEO排名离不开…...
别再硬记索引了!Mujoco Python API实战:用`name`属性优雅读写机器人关节状态
别再硬记索引了!Mujoco Python API实战:用name属性优雅读写机器人关节状态 在机器人仿真开发中,我们常常陷入这样的困境:面对一个20自由度的机械臂,需要反复查阅文档确认data.qpos[12]对应的是哪个关节;当X…...
【2026 CVPR】Asking like Socrates: Socrates helps VLMs understand remote sensing images
RS-EoT (Remote Sensing Evidence-of-Thought) 研究旨在解决视觉语言模型(VLM)在处理遥感图像时的“虚假推理”问题 。 文章目录 核心问题 核心思想 核心方法 A. 数据合成:SocraticAgent Data Statistics B. 训练策略:两阶段渐进式强化学习 (RL) C. 训练策略 实验验证 主要…...
Element Plus:Vue 3企业级UI组件库的全方位解析与实践指南
Element Plus:Vue 3企业级UI组件库的全方位解析与实践指南 【免费下载链接】element-plus 🎉 A Vue.js 3 UI Library made by Element team 项目地址: https://gitcode.com/GitHub_Trending/el/element-plus Element Plus作为基于Vue 3的企业级UI…...
论文不同章节降AI策略不同:分章节精准处理的完整教程
论文不同章节降AI策略不同:分章节精准处理的完整教程 上周室友第一次用降AI工具,操作错了好几步,差点浪费机会。觉得有必要写一篇详细教程。 我用的是嘎嘎降AI(www.aigcleaner.com),4.8元一篇,…...
SEO关键词长尾词优化工具源码解析:站长流量增长的秘密武器
一、长尾关键词优化的核心价值长尾关键词通常由3个以上词汇组成,例如“适合初学者的Python编程教程”或“2026年性价比最高的智能手表推荐”。这类关键词虽然单个搜索量较低,但整体覆盖了用户搜索意图的细分场景,具有以下优势:精准…...
OBS屏幕录制全攻略:从零开始轻松上手
1. OBS屏幕录制入门指南 第一次接触OBS的朋友可能会被它复杂的界面吓到,但其实它的核心功能非常简单。我刚开始用OBS时也走了不少弯路,现在就把这些经验分享给大家。OBS Studio(Open Broadcaster Software)是一款开源免费的屏幕录…...
