Java内存模型解析:多线程与高并发原理
版权申诉
58 浏览量
更新于2024-08-06
收藏 549KB DOC 举报
Java内存模型(JMM)与多线程高并发原理
Java内存模型(Java Memory Model,简称JMM)是Java语言中定义的线程和主内存之间的抽象关系。JMM规定了线程对主内存的操作具备原子性,包括lock、unlock、read、load、use、assign、store和write八个操作。
在JMM中,每个线程都有一个私有的工作内存,工作内存中存储了该线程以读/写共享变量的副本。工作内存是一个抽象概念,并不真实存在。它涵盖了缓存、写缓冲区、寄存器以及其他的硬件和编译器优化。Java内存模型是基于CPU缓存模型建立的,只不过Java内存模型是标准化的,屏蔽掉底层不同的计算机的区别。
JMM的问题之一是多线程下的可见性问题。当多个线程同时访问同一个共享变量时,可能会出现一些意外的结果。例如,在上面的代码中,两个未加同步控制的线程去同时对i自增,会出现三种情况:i=1、i=1或者i=2、i=2。这种情况的出现是因为每个线程都有自己的工作内存,工作内存中的变量副本可能不同步。
在JMM中,read操作是从主内存读取变量的值到线程的工作内存,load操作是将读取的值放入线程本地变量副本中,use操作是将变量的值传递给执行引擎,assign操作是将执行引擎的结果赋值给线程本地变量,store操作是将变量的值存储到工作内存,write操作是将变量的值写回到主内存。
JMM的八个操作可以分为三个阶段:读取阶段、执行阶段和写回阶段。读取阶段包括read和load操作,执行阶段包括use、assign操作,写回阶段包括store和write操作。lock和unlock操作是用于同步线程的,防止多个线程同时访问同一个共享变量。
JMM是Java语言中定义的线程和主内存之间的抽象关系,规定了线程对主内存的操作具备原子性,包括八个操作。JMM的问题之一是多线程下的可见性问题,可以通过同步机制来解决。
2020-04-14 上传
2021-11-21 上传
2023-06-11 上传
2023-07-27 上传
2023-09-16 上传
2023-06-06 上传
2023-06-10 上传
2023-07-27 上传
2023-07-14 上传
书博教育
- 粉丝: 1
- 资源: 2834
最新资源
- Postman安装与功能详解:适用于API测试与HTTP请求
- Dart打造简易Web服务器教程:simple-server-dart
- FFmpeg 4.4 快速搭建与环境变量配置教程
- 牛顿井在围棋中的应用:利用牛顿多项式求根技术
- SpringBoot结合MySQL实现MQTT消息持久化教程
- C语言实现水仙花数输出方法详解
- Avatar_Utils库1.0.10版本发布,Python开发者必备工具
- Python爬虫实现漫画榜单数据处理与可视化分析
- 解压缩教材程序文件的正确方法
- 快速搭建Spring Boot Web项目实战指南
- Avatar Utils 1.8.1 工具包的安装与使用指南
- GatewayWorker扩展包压缩文件的下载与使用指南
- 实现饮食目标的开源Visual Basic编码程序
- 打造个性化O'RLY动物封面生成器
- Avatar_Utils库打包文件安装与使用指南
- Python端口扫描工具的设计与实现要点解析