并发编程(二)JMM模型

简介: 并发编程(二)JMM模型

什么是线程

进程是系统分配资源的基本单位,线程是CPU调度的基本单位,每个进程至少有一个线程,线程寄生在进程当中,每个线程都有一个程序计数器(保存下个要执行的指令),一组寄存器(保存当前线程中的工作变量),堆栈(记录执行历史,每一帧中保存了一个已调用但未返回的方法)。

线程分两类:

  • 用户级线程(user level thread)
  • 内核级线程(kernel level thread)

用户空间划分:

  • 用户空间
  • 内核空间

ULTKLT

ULT与KLT.png

Java线程与内核线程的关系

Java线程与内核线程的关系.png

Java线程生命状态

Java线程的生命状态.png

线程上下文切换过程

线程上下文切换过程.png

JMM模型

JMMJVM内存区域的划分是不同的概念层次,更恰当说JMM描述的是一组规则,通过这组规则控制程序中各个变量在共享数据区域和私有数据区域的访问方式,JMM是围绕原子性,有序性、可见性展开

JMM模型.png

Java内存模型内存交互操作

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

Java内存模型内存交互操作.png

把一个变量从主内存中复制到工作内存中,就需要按顺序地执行read和load操作,如果把变量从工作内存中同步到主内存中,就需要按顺序地执行store和write操作。但Java内存模型只要求上述8大操作(原子操作)必须按顺序执行,而没有保证必须是连续执行。

  1. 不允许一个线程无原因地(没有发生过任何assign操作)把数据从工作内存同步回主内存中
  2. 一个新的变量只能在主内存中诞生,不允许在工作内存中直接使用一个未被初始化(load或者assign)的变量。即就是对一个变量实施use和store操作之前,必须先自行assign和load操作。
  3. 一个变量在同一时刻只允许一条线程对其进行lock操作,但lock操作可以被同一线程重复执行多次,多次执行lock后,只有执行相同次数的unlock操作,变量才会被解锁。lock和unlock必须成对出现。
  4. 如果对一个变量执行lock操作,将会清空工作内存中此变量的值,在执行引擎使用这个变量之前需要重新执行load或assign操作初始化变量的值。
  5. 如果一个变量事先没有被lock操作锁定,则不允许对它执行unlock操作;也不允许去unlock一个被其他线程锁定的变量。
  6. 对一个变量执行unlock操作之前,必须先把此变量同步到主内存中(执行store和write操作)

目录
相关文章
Echarts2.0雷达图tooltip单轴数据
Echarts2.0雷达图tooltip单轴数据
483 0
|
机器学习/深度学习 人工智能 自然语言处理
撒花!PyTorch 官方教程中文版正式上线,激动人心的大好事!
撒花!PyTorch 官方教程中文版正式上线,激动人心的大好事!
1328 0
撒花!PyTorch 官方教程中文版正式上线,激动人心的大好事!
夸克网盘的文件怎么保存到百度网盘?
夸克网盘的文件怎么保存到百度网盘?
8266 2
夸克网盘的文件怎么保存到百度网盘?
|
10月前
|
存储 Linux 网络安全
linux应急响应检查脚本
通过这个脚本,可以快速收集系统的关键信息,有助于在发生问题时进行及时的应急响应和分析。
332 34
|
10月前
|
机器学习/深度学习 资源调度 计算机视觉
RT-DETR改进策略【Conv和Transformer】| CVPR-2022 Deformable Attention Transformer 可变形注意力 动态关注目标区域
RT-DETR改进策略【Conv和Transformer】| CVPR-2022 Deformable Attention Transformer 可变形注意力 动态关注目标区域
456 15
RT-DETR改进策略【Conv和Transformer】| CVPR-2022 Deformable Attention Transformer 可变形注意力 动态关注目标区域
|
机器学习/深度学习 人工智能 数据处理
【AI系统】NV Switch 深度解析
英伟达的NVSwitch技术是高性能计算领域的重大突破,旨在解决多GPU系统中数据传输的瓶颈问题。通过提供比PCIe高10倍的带宽,NVLink实现了GPU间的直接数据交换,减少了延迟,提高了吞吐量。NVSwitch则进一步推动了这一技术的发展,支持更多NVLink接口,实现无阻塞的全互联GPU系统,极大提升了数据交换效率和系统灵活性,为构建强大的计算集群奠定了基础。
1047 3
|
机器学习/深度学习 PyTorch 算法框架/工具
降龙十八掌:这套优化transformer内存占用的组合技值得收藏(1)
降龙十八掌:这套优化transformer内存占用的组合技值得收藏
524 0
|
人工智能 自然语言处理 搜索推荐
谷歌 ai人工智能平台叫什么?请记住答案是:Gemini
Gemini 是 Google 开发的一个大型AI语言模型 ,代表着人工智能领域的一项重大进步。它是一个强大的工具,旨在理解和生成人类语言,并具备广泛的功能,可以帮助人们完成各种任务,从创作不同类型的文本到回答复杂的问题,再到翻译语言等等。
|
移动开发 前端开发 应用服务中间件
挂售转卖竞拍商城系统源码/竞拍系统/转拍闪拍系统/后端PHP+前端UNiapp源码
挂售转卖竞拍商城系统源码/竞拍系统/转拍闪拍系统/后端PHP+前端UNiapp源码 亲测可用
353 1
|
XML IDE 前端开发
IDEA忽略node_modules减少内存消耗,提升索引速度
在后端开发中,IDEA 在运行前端代码时,频繁扫描 `node_modules` 文件夹会导致高内存消耗和慢索引速度,甚至可能会导致软件卡死。为了改善这一问题,可以按照以下步骤将 `node_modules` 文件夹设为忽略:通过状态菜单右键排除该文件夹、在设置选项中将其加入忽略列表,并且手动修改项目的 `.iml` 文件以添加排除配置。这些操作可以有效提高IDE的运行性能、减少内存占用并简化项目结构,但需要注意的是,排除后将无法对该文件夹进行索引,操作文件时需谨慎。
1228 4
IDEA忽略node_modules减少内存消耗,提升索引速度