并发编程(二)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操作)

目录
相关文章
|
3月前
|
安全 Java 程序员
深入理解Java内存模型(JMM)及其对并发编程的影响
【6月更文挑战第29天】在Java并发编程的世界中,内存模型是基石之一。本文将深入探讨Java内存模型(JMM)的核心概念,包括可见性、原子性、有序性和同步,并解释它们如何影响并发编程实践。通过分析JMM的工作原理和它与Java并发库的关系,我们将揭示正确使用JMM原则可以如何避免并发编程中的常见陷阱。
|
3月前
|
Java 程序员
深入理解Java内存模型(JMM)与并发编程
在Java并发编程领域,理解Java内存模型(JMM)是至关重要的。本文旨在通过数据导向的分析、科学严谨的论述和逻辑严密的结构,探讨JMM如何影响并发编程实践。我们将从JMM的基本概念出发,逐步深入到并发编程中的具体应用,包括同步机制、volatile关键字的作用以及线程间的通信。本文将引用权威研究与实验证据,结合经典理论,为读者提供全面的JMM知识框架,以促进对Java并发编程深层次的理解。
|
2月前
|
存储 缓存 安全
深入理解Java内存模型(JMM)及其在并发编程中的应用
本文旨在探索Java内存模型(JMM)的奥秘,并揭示其在并发编程中的关键作用。我们将通过数据支撑,案例分析,以及对比研究的方法,深入剖析JMM的核心概念、原理和机制。文章将提供丰富的实例,包括同步块、volatile关键字的使用,以及线程间的通信机制,来具体展示JMM如何管理并发环境下的数据一致性和可见性问题。我们还将讨论JMM在现代多核处理器架构下面临的挑战,以及如何在编写高效且线程安全的代码时避免常见的并发陷阱。最后,文章将提出一些最佳实践,帮助开发者充分利用JMM的特性,以提升应用程序的性能和可靠性。
|
10月前
|
存储 缓存 Java
并发编程系列教程(05) - Java内存模型
并发编程系列教程(05) - Java内存模型
45 0
|
11月前
|
存储 缓存 安全
JUC第二讲:Java并发理论基础:Java内存模型(JMM)与线程
JUC第二讲:Java并发理论基础:Java内存模型(JMM)与线程
103 0
|
存储 缓存 安全
【Java并发编程 二】JMM内存模型(一)
【Java并发编程 二】JMM内存模型(一)
218 0
|
缓存 安全 Java
【Java并发编程 二】JMM内存模型(三)
【Java并发编程 二】JMM内存模型
97 0
|
存储 缓存 Java
高并发编程-重新认识Java内存模型(JMM)
高并发编程-重新认识Java内存模型(JMM)
106 0
|
缓存 Java 编译器
juc并发编程02——JMM模型(上)
我们在这篇文章中将介绍JMM模型,也就是java内存模型。注意,本文所提到的JMM模型与JVM内存模型属于不同层次的内容。JVM内存模型讲的是物理内存空间的分配,而JMM则强调对于JVM内存模型的抽象。
juc并发编程02——JMM模型(上)
|
缓存 Java 程序员
juc并发编程02——JMM模型(下)
我们在这篇文章中将介绍JMM模型,也就是java内存模型。注意,本文所提到的JMM模型与JVM内存模型属于不同层次的内容。JVM内存模型讲的是物理内存空间的分配,而JMM则强调对于JVM内存模型的抽象。
juc并发编程02——JMM模型(下)