JMM是什么?

系列文章:【并发编程】知识脉络

前言 

        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
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java程序员调优

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值