Java内存模型 - 同步八种操作
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内存模型 - 同步八种操作相关推荐
- 全面理解java内存模型_深入理解Java内存模型(八)——总结
处理器内存模型 顺序一致性内存模型是一个理论参考模型,JVM和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照.JVM和处理器内存模型在设计时会对顺序一致性模型做一些放松,因为如果完全按照顺序 ...
- 【JVM】第四章 Java内存模型
第四章 Java内存模型 文章目录 第四章 Java内存模型 一.物理机的并发问题 1.硬件的效率问题 2.缓存一致性问题 3.代码乱序执行优化问题 二.Java 内存模型 1.概念 2.Java 内 ...
- 【高并发】别闹了,这样理解Java的内存模型才正确(八种操作+同步规则)
大家好,我是冰河~~ 最近冰河不是又出版了一本<深入理解高并发编程:核心原理与案例实战>一书吗?很多小伙伴对于Java的内存模型还是不太了解,今天,我就用最简短的篇幅结合八种操作和同步规则 ...
- 也许,这是东半球最叼的Java内存模型
面试官:你好,你先自我介绍一下. 安琪拉:面试官你好,我叫安琪拉,草丛三婊,最强中单,草地摩托车车手,第21套广播体操推广者,火球拥有者.不焚者,安琪拉,这是我的简历,请过目. 面试官:看你简历上写熟 ...
- 面试官:说说什么是Java内存模型?
在面试中,面试官经常喜欢问:『说说什么是Java内存模型(JMM)?』 面试者内心狂喜,这题刚背过:『Java内存主要分为五大块:堆.方法区.虚拟机栈.本地方法栈.PC寄存器,balabala--』 ...
- Java内存模型(转载)
1. 概述 多任务和高并发是衡量一台计算机处理器的能力重要指标之一.一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题 ...
- 并发编程-02并发基础CPU多级缓存和Java内存模型JMM
文章目录 CPU多级缓存 CPU多级缓存概述 CPU 多级缓存-缓存一致性协议MESI CPU 多级缓存-乱序执行优化-重排序 JAVA内存模型 (JMM) 计算机硬件架构简易图示 JAVA内存模型与 ...
- java 及时释放内存_JMM(一):初识Java内存模型
在并发编程中,线程之间的通信是一个很关键的问题,而该问题解决方案主要可分为两大类:消息传递.共享内存.前者有以Erlang语言为代表的Actor模型,而后者中典型的则是Java语言.对于消息传递机制而 ...
- 图文并茂的聊聊Java内存模型!
在面试中,面试官经常喜欢问:『说说什么是Java内存模型(JMM)?』 面试者内心狂喜,这题刚背过:『Java内存主要分为五大块:堆.方法区.虚拟机栈.本地方法栈.PC寄存器,balabala--』 ...
最新文章
- 获取json的节点名称
- php 日志处理工具 SeasLog 的使用
- oracle 打印SQL
- mysql8.0client_navicat 连接mysql8.0 报错client does not support authentication
- 七边形简单画法步骤图_零基础国画教程:分步骤图解教你画3种常见树画法,简单易学...
- JAVA常用设计模式(一、单例模式、工厂模式)
- 关于CKEditor4.5.6的使用,自定义toolbar配置,上传图片案例(SpringMVC+MyBatis案例),自定义行高,去编辑器的中内容,将编辑器中内容设置到指定的位置等
- 复杂分组统计---表在文件中
- 提高编程水平的一段必经之路,研读官方文档
- HTCondor运行Java文件
- 【Vegas原创】Can't connect to X11 window server using ':0.0' 解决方法
- RobotFramework与Eclipse集成
- 计算机对学习的好处,学习计算机的好处
- C++随机设置壁纸小软件
- Chrome谷歌浏览器屏蔽百度搜索右侧广告推荐方法
- 软件开发README文档书写模板
- NavigationView简单操作
- JDK 21 要来了:已从主线分叉,将成为下一个 LTS 版本!
- 爬虫配套学习-前端学习笔记06-一些动态效果
- 千锋教育实训day06————java