并发编程深入理解JMM&并发三大特性

发布时间 2023-05-27 20:29:26作者: 余明星

1 并发编程三大特性

  1. 可见性
  2. 原子性
  3. 有序性

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: 将工作内存中的变量传递给执行引擎

其他略