JMM是什么?
系列文章:【并发编程】知识脉络前言JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。 JMM可以理解为是一个规范,一个抽象概念,并不真实存在。JMM结构Java的并发采用的是共享内存模型线程之间的共享变量存储在主内存(Main Memory)中。共享变量 <--->主内存每个线程都有一个私有的本地内存(Local Memory)。本地内存中存储了该线程以读/写共
·
系列文章:【并发编程】知识脉络
前言
JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。 JMM可以理解为是一个规范,一个抽象概念,并不真实存在。
JMM结构
Java的并发采用的是共享内存模型
- 线程之间的共享变量存储在主内存(Main Memory)中。
- 共享变量 <--->主内存
- 每个线程都有一个私有的本地内存(Local Memory)。
- 本地内存中存储了该线程以读/写共享变量的副本。
- 共享变量的副本<--->本地内存
JMM工作流程
JMM规定
- 按顺序执行read--load,且不可单独出现。
- 按顺序执行store-- write,且不可单独出现。
- 有assign操作后,变量改变后,需要同步到主内存中。
- 新变量必须诞生在主内存中,不可使用未load过的变量。
- 一个变量同一时刻只允许一个线程lock它。且一个lock就要一个unlock解开。
- 对变量lock操作,将会清空所有本地内存中此变量。
- unlock一个变量前必须有store 和 write操作。
- ......
JMM面临的问题
可见性:如何保证共享变量的副本变化后其他线程可见?
有序性:如何保证第一步到第六步按顺序执行?
原子性:如何保证第一步到第六步完整执行?
结尾
了解了JMM结构和工作流程,就会发现使用并发编程时,需要考虑得多一些,同时Java也努力用一些简单的方式帮助我们规避这些可能的问题,例如:volatile关键字、synchronize的关键字等等。之后将会一一解读。
更多推荐
已为社区贡献3条内容
所有评论(0)