第三章 java内存模型与并发三大特性

发布时间:2023年12月31日

内存模型简介

JMM(java内存模型Java Memory Model)本身是一种抽象的概念,描述的是一组规则或规范。通过这组规范定义了程序中各个变量的访问方式。Java本身的运行是基于虚拟机的,在虚拟机的规范中,Java定义了一种内存模型,来屏蔽掉硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。Java 线程之间的通信由 Java 内存模型控制的,下图就是java内存模型的抽象结构
在这里插入图片描述

内存模型的组成

  • 主内存:就是各个线程共享的序曲,对应着jvm虚拟机堆区
  • 本地内存:这个区域就是每个线程独有区域,不同线程不能相互访问,对应着jvm虚拟机栈
  • 工作方式:
    线程A把本地内存A中更新过的共享变量刷新到主内存
    线程B到主内存中去读取线程A之前已更新过的共享变量

内存模型在保证有序性时的两个原则

  • as-if-seria
    不管如何重排序,单线程程序的执行结果不能被改变
  • happens-before
    在jmm中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须存在happers-before关系
    1.程序顺序规则
    一个线程中的每个操作,happens-before 于该线程中的任意后续操作
    2.监视器锁规则
    对一个锁的解锁,happens-before于随后对这个锁的加锁
    3.volatile变量规则
    对一个volatile域的写,happens-before 于任意后续对这个volatile域的读
    4.传递性
    如果A happens-before B,且 B happens-before C ,那么 happens-before C

并发三大特性

  • 原子性
    原子本意是不能再进一步分割的最小粒子,而原子操作就是一个不可中断操作。
    1.处理器
    是通过对总线锁或者缓存锁进行锁定保证原子性
    2.java
    可以通过锁或者CAS方式来实现原子操作

  • 有序性
    1.通过volatile 修改,来实现,原理通过内存屏障实现
    2.通过锁,来实现 例如synchronized

  • 可见性

文章来源:https://blog.csdn.net/GZ946/article/details/135320208
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。