并发编程深入理解JMM&并发三大特性
1 并发编程三大特性
- 可见性
- 原子性
- 有序性
2 JMM概念
java虚拟机规范中定义了java内存模型,用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现java程序在各种平台下都能达到一致的并发效果。
jmm规范规定了java虚拟机与计算机内存是如何协同工作的:
规定了一个线程如何及何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。
jmm描述的是一种抽象的概念,一种规则,通过这组规则控制程序中各个变量在共享数据区域和私有数据区域的访问方式。
jmm时围绕原子性,可见性,有序性展开的。
3 三大特性描述
3.1 可见性
描述:当一个线程修改了共享变量的值,其他线程能够看到修改的值。
如何保证可见性:
-
-
- volatile
- 内存屏障
- synchronized
- lock
- final
-
java内存模型是通过,在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值,这种依赖主内存作为传递媒介的方法来保证可见性。
3.2 有序性
描述:按照代码的先后顺序执行,jvm存在指令重排,所有存在有序性问题。
如何保证有序性:
-
-
- volatile
- 内存屏障
- synchronized
- lock
-
3.3 原子性
描述: 略
如何保证原子性
-
-
- synchronized
- lock
- cas
-
4 上图
5 内存交互操作
lock: 作用于主内存的变量,把一个变量标识为线程独占状态
read: 作用于主内存的变量,把主内存的变量运输到工作内存中,以便load操作
load:作用于工作内存的变量,把read的值放入到工作内存的副本中
use: 将工作内存中的变量传递给执行引擎
其他略
6 happens-before原则
在jmm中如果一个操作执行的结果要对另一个操作可见或者代码重排序,那么这两个操作之前必须存在happens-before原则
happens-before原则两点含义:
- 如果一个操作发生在另一个操作之前,那么可见。且有序。
- 两个操作happens-before,并不意味着,一定要顺序执行。
八大原则
次序规则,锁定规则,volatie规则,传递规则,线程启动,线程中断,线程关闭,对象结束规则。不展开介绍
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理