Java 内存模型 - 同步操作与规则

Java内存模型 - 同步八种操作

锁定(lock): 作用于主内存中的变量,将他标记为一个线程独享变量。

通常意义上的上锁,就是一个线程正在使用时,其他线程必须等待该线程任务完成才能继续执行自己的任务。

解锁(unlock): 作用于主内存中的变量,解除变量的锁定状态,被解除锁定状态的变量才能被其他线程锁定。

执行完成后解开锁。

read(读取):作用于主内存的变量,它把一个变量的值从主内存传输到线程的工作内存中,以便随后的 load 动作使用。

从主内存 读取到工作内存中。

load(载入):把 read 操作从主内存中得到的变量值放入工作内存的变量的副本中。

给工作内存中的副本赋值。

use(使用):把工作内存中的一个变量的值传给执行引擎,每当虚拟机遇到一个使用到变量的指令时都会使用该指令。

程序执行过程中读取该值时调用。

assign(赋值):作用于工作内存的变量,它把一个从执行引擎接收到的值赋给工作内存的变量,每当虚拟机遇到一个给变量赋值的字节码指令时执行这个操作。

将运算完成后的新值赋回给工作内存中的变量,相当于修改工作内存中的变量。

store(存储):作用于工作内存的变量,它把工作内存中一个变量的值传送到主内存中,以便随后的 write 操作使用。

将该值从变量中取出,写入工作内存中。

write(写入):作用于主内存的变量,它把 store 操作从工作内存中得到的变量的值放入主内存的变量中。

将工作内存中的值写回主内存。

Java内存模型 - 同步规则

  • 不允许 read 和 load、store 和 write 操作之一单独出现,即不允许一个变量从主内存读取了但工作内存不接受,或者从工作内存发起回写了但主内存不接受的情况出现。

  • 不允许一个线程丢弃它的最近的 assign 操作,即变量在工作内存中改变了之后必须把该变化同步回主内存。

  • 不允许一个线程无原因地(没有发生过任何 assign 操作)把数据从线程的工作内存同步回主内存中。

  • 一个新的变量只能在主内存中 “诞生”,不允许在工作内存中直接使用一个未被初始化(load 或 assign)的变量,换句话说就是对一个变量实施 use 和 store 操作之前,必须先执行过了 assign 和 load 操作。

  • 一个变量在同一个时刻只允许一条线程对其进行 lock 操作,但 lock 操作可以被同一条线程重复执行多次,多次执行 lock 后,只有执行相同次数的 unlock 操作,变量才会被解锁。

  • 如果对一个变量执行 lock 操作,将会清空工作内存中此变量的值,在执行引擎使用这个变量前,需要重新执行 load 或 assign 操作初始化变量的值。

  • 如果一个变量事先没有被 lock 操作锁定,则不允许对它执行 unlock 操作,也不允许去 unlock 一个被其他线程锁定住的变量。

Java内存模型 - 同步八种操作相关推荐

  1. 全面理解java内存模型_深入理解Java内存模型(八)——总结

    处理器内存模型 顺序一致性内存模型是一个理论参考模型,JVM和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照.JVM和处理器内存模型在设计时会对顺序一致性模型做一些放松,因为如果完全按照顺序 ...

  2. 【JVM】第四章 Java内存模型

    第四章 Java内存模型 文章目录 第四章 Java内存模型 一.物理机的并发问题 1.硬件的效率问题 2.缓存一致性问题 3.代码乱序执行优化问题 二.Java 内存模型 1.概念 2.Java 内 ...

  3. 【高并发】别闹了,这样理解Java的内存模型才正确(八种操作+同步规则)

    大家好,我是冰河~~ 最近冰河不是又出版了一本<深入理解高并发编程:核心原理与案例实战>一书吗?很多小伙伴对于Java的内存模型还是不太了解,今天,我就用最简短的篇幅结合八种操作和同步规则 ...

  4. 也许,这是东半球最叼的Java内存模型

    面试官:你好,你先自我介绍一下. 安琪拉:面试官你好,我叫安琪拉,草丛三婊,最强中单,草地摩托车车手,第21套广播体操推广者,火球拥有者.不焚者,安琪拉,这是我的简历,请过目. 面试官:看你简历上写熟 ...

  5. 面试官:说说什么是Java内存模型?

    在面试中,面试官经常喜欢问:『说说什么是Java内存模型(JMM)?』 面试者内心狂喜,这题刚背过:『Java内存主要分为五大块:堆.方法区.虚拟机栈.本地方法栈.PC寄存器,balabala--』 ...

  6. Java内存模型(转载)

    1. 概述 多任务和高并发是衡量一台计算机处理器的能力重要指标之一.一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题 ...

  7. 并发编程-02并发基础CPU多级缓存和Java内存模型JMM

    文章目录 CPU多级缓存 CPU多级缓存概述 CPU 多级缓存-缓存一致性协议MESI CPU 多级缓存-乱序执行优化-重排序 JAVA内存模型 (JMM) 计算机硬件架构简易图示 JAVA内存模型与 ...

  8. java 及时释放内存_JMM(一):初识Java内存模型

    在并发编程中,线程之间的通信是一个很关键的问题,而该问题解决方案主要可分为两大类:消息传递.共享内存.前者有以Erlang语言为代表的Actor模型,而后者中典型的则是Java语言.对于消息传递机制而 ...

  9. 图文并茂的聊聊Java内存模型!

    在面试中,面试官经常喜欢问:『说说什么是Java内存模型(JMM)?』 面试者内心狂喜,这题刚背过:『Java内存主要分为五大块:堆.方法区.虚拟机栈.本地方法栈.PC寄存器,balabala--』 ...

最新文章

  1. 获取json的节点名称
  2. php 日志处理工具 SeasLog 的使用
  3. oracle 打印SQL
  4. mysql8.0client_navicat 连接mysql8.0 报错client does not support authentication
  5. 七边形简单画法步骤图_零基础国画教程:分步骤图解教你画3种常见树画法,简单易学...
  6. JAVA常用设计模式(一、单例模式、工厂模式)
  7. 关于CKEditor4.5.6的使用,自定义toolbar配置,上传图片案例(SpringMVC+MyBatis案例),自定义行高,去编辑器的中内容,将编辑器中内容设置到指定的位置等
  8. 复杂分组统计---表在文件中
  9. 提高编程水平的一段必经之路,研读官方文档
  10. HTCondor运行Java文件
  11. 【Vegas原创】Can't connect to X11 window server using ':0.0' 解决方法
  12. RobotFramework与Eclipse集成
  13. 计算机对学习的好处,学习计算机的好处
  14. C++随机设置壁纸小软件
  15. Chrome谷歌浏览器屏蔽百度搜索右侧广告推荐方法
  16. 软件开发README文档书写模板
  17. NavigationView简单操作
  18. JDK 21 要来了:已从主线分叉,将成为下一个 LTS 版本!
  19. 爬虫配套学习-前端学习笔记06-一些动态效果
  20. 千锋教育实训day06————java

热门文章

  1. 分享一个蛋疼的俄罗斯方块小游戏
  2. Bash中命令连接符的用法——一次执行多个命令-转
  3. 蓝桥杯 ALGO-139 算法训练 s01串
  4. 蓝桥杯 ALGO-113 算法训练 数的统计
  5. 1020. 月饼 (25)-PAT乙级真题
  6. L1-027. 出租-PAT团体程序设计天梯赛GPLT
  7. @ARGV:perl命令行参数
  8. 颜值控必备!一看就会的动态图表,让枯燥的图表变得生动起来!
  9. Mysql 远程自动化备份
  10. 运行vue init webpack vueTest时报错