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

前言 

        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的关键字等等。之后将会一一解读。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐