我是🌟廖志伟🌟,一名🌕Java开发工程师🌕、📝Java领域优质创作者📝、🎉CSDN博客专家🎉、🌹幕后大佬社区创始人🌹。拥有多年一线研发经验,研究过各种常见框架及中间件的底层源码,对于大型分布式、微服务、三高架构(高性能、高并发、高可用)有过实践架构经验。
🍊博主:java_wxid
🍊博主:Java廖志伟
🍊社区:幕后大佬
本文内容:
JMM
JMM(java内存模型)是什么?
是一组规则,规范,是一个虚的概念,不真实存在。它定义了程序中的变量访问方式。
JMM的三大特性?
可见性
原子性
有序性
JMM同步的规定有那些?
线程解锁前,必须把共享变量的值刷新回主内存
线程加锁钱,必须读取主内存的最新值到自己的工作内存
加锁解锁是同一把锁
什么是主内存?什么是自己的工作内存?
主内存:就是你买电脑选择8G内存,这个就是你的主内存,也是你new 一个对象存放的地方,是共享内存区域,所有线程都可以访问,java内存模型中规定所有不了存储在主内存里。
工作内存:是JVM在每个线程创建的时候为线程创建一个工作内存,工作内存是每个线程的私有数据区域。
线程对变量的操作是在工作内存中还是主内存中进行的?
JVM运行的实体是线程,线程对变量的读取赋值要先将变量从主内存拷贝自己的工作内存空间,在工作内存中进行操作,操作完成后再将变量写回主内存,不能直接操作主内存的变量,而工作内存中存储的是主内存中的变量副本,所以不同线程之间无法访问对方的工作内存,要通过主内存来完成。
JMM内存模型的可见性如何理解?
现在我要对student对象中age年龄进行赋值,有三个线程t1,t2,t3同时对age进行赋值,这三个线程会从主内存中拷贝一份副本,到自己的工作空间。
t1最先进行赋值,将age改为37,并写回主内存
这个时候其他现在还不知道主内存的值改变了,需要及时通知,这个及时通知就是JMM内存模型的可见性。接着t2和t3知道我手上这个值已经不是最新的值了,需要重新去主内存拷贝最新值,简单来说就是只要主内存的值改变了就通知线程让它重新拷贝。或者可以打个比方:只要我在微信群了@所有人,发红包,指令是“我是最帅的”,群里的其他人都知道我发红包了,让他们全部人回复“我是最帅的”就可以领取红包。
总结
以上就是今天要讲的内容,还希望各位读者大大能够在评论区积极参与讨论,给文章提出一些宝贵的意见或者建议📝,合理的内容,我会采纳更新博文,重新分享给大家。
🙏四连 关注🔎点赞👍收藏⭐️留言📝
感谢大家的支持,用心写博文分享给大家,你的支持(🔎点赞👍收藏⭐️留言📝)是对我创作的最大帮助。
🍊微信公众号:南北踏尘
🍊主页地址:java_wxid
🍊社区地址:幕后大佬
给读者大大的话
我本身是一个很普通的程序员,放在人堆里,除了与生俱来的🌹盛世美颜🌹、所剩不多的发量,就剩下180的大高个了。就是我这样的一个人,默默坚持写博文也有好多年了,有句老话说的好,🌕牛逼之前都是傻逼式的坚持🌕。希望自己可以通过大量的作品,时间的积累,个人魅力、运气和时机,可以打造属于自己的🌟技术影响力🌟。同时也希望自己可以成为一个🎄懂技术🎄,🎄懂业务🎄,🎄懂管理🎄的综合型人才,作为项目架构路线的总设计师,掌控全局的🌕团队大脑🌕,技术团队中的🍊绝对核心🍊是我未来几年不断前进的目标。
提示:以下都是资源分享,求个一键三连。
面试资料
福利大放送,🎉欢迎关注🔎点赞👍收藏⭐️留言📝,拜托了🙏,这对我真的很重要。
点击:面试资料
提取码:2021
200套PPT模板
福利大放送,🎉欢迎关注🔎点赞👍收藏⭐️留言📝,拜托了🙏,这对我真的很重要。
点击:200套PPT模板
提取码:2021
提问的智慧
福利大放送,🎉欢迎关注🔎点赞👍收藏⭐️留言📝,拜托了🙏,这对我真的很重要。
点击:提问的智慧
提取码:2021
Java开发学习路线
名称 | 链接 |
---|---|
JavaSE | 点击: JavaSE |
MySQL专栏 | 点击: MySQL专栏 |
JDBC专栏 | 点击: JDBC专栏 |
MyBatis专栏 | 点击: MyBatis专栏 |
Web专栏 | 点击: Web专栏 |
Spring专栏 | 点击: Spring专栏 |
SpringMVC专栏 | 点击: SpringMVC专栏 |
SpringBoot专栏 | 点击: SpringBoot专栏 |
SpringCould专栏 | 点击: SpringCould专栏 |
Redis专栏 | 点击: Redis专栏 |
Linux专栏 | 点击: Linux专栏 |
Maven3专栏 | 点击: Maven3专栏 |
Spring Security5专栏 | 点击: Spring Security5专栏 |
更多专栏 | 更多专栏,请到 java_wxid主页 查看 |
P5学习路线图
P6学习路线图
P7学习路线图
P8学习路线图
以上四张图详细介绍了作为Java开发工作者所需要具备的知识技能,同学们学废了嘛,有想法系统学习的同学可以私聊我,🎉欢迎关注🔎点赞👍收藏⭐️留言📝。
🍊博主:java_wxid
🍊博主:Java廖志伟
🍊社区:幕后大佬
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?