摘要:它们以一种指令屏障的方式来控制顺序。不过这样的方式能保证读的一瞬间确保线程读取到最新的数据,因此要进一步做到读取修改写入动作是一致的,就将其升级为原子性。
JMM中一些普通变量的操作指令
A、Load操作发生在read之后(两个之间可以有其他的指令)
B、普通变量的修改未必会立即发生Store操作,但发生Store操作,就会发生write操作
最细的粒度支持,也就是对Load、Store的各种顺序控制,load、store两两组合为4中情况,LoadLoad、StoreStore、LoadStore、StoreLoad。它们以一种指令屏障的方式来控制顺序。有些系统可能不支持某些指令的顺序化,不过,绝大多数系统都支持StoreLoad指令。
StoreLoad的意思可以简单理解为Store优先于Load发生。例如两个在某个瞬间同时修改和读取主存中的一个共享变量,此时的读取操作将发生在修改之后。有了这样一个特征,就实现了最细粒度的锁,也是最轻量级的锁。
不过这样的方式能保证读的一瞬间确保线程读取到最新的数据,因此要进一步做到读取、修改、写入动作是一致的,就将其升级为原子性。要达到原子性的效果,可以通过可见性、CAS自旋来完成,也可以通过synchronized来完成。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/65774.html
摘要:文章简介分析的作用以及底层实现原理,这也是大公司喜欢问的问题内容导航的作用什么是可见性源码分析的作用在多线程中,和都起到非常重要的作用,是通过加锁来实现线程的安全性。而的主要作用是在多处理器开发中保证共享变量对于多线程的可见性。 文章简介 分析volatile的作用以及底层实现原理,这也是大公司喜欢问的问题 内容导航 volatile的作用 什么是可见性 volatile源码分析 ...
摘要:内存模型对内存模型的介绍对内存模型的结构图的线程之间的通信是通过共享内存的方式进行隐式通信,即线程把某状态写入主内存中的共享变量,线程读取的值,这样就完成了通信。 Java内存模型(JMM) 1.对内存模型的介绍 ①对Java内存模型的结构图 java的线程之间的通信是通过共享内存的方式进行隐式通信,即线程A把某状态写入主内存中的共享变量X,线程B读取X的值,这样就完成了通信。是一种...
摘要:并发编程的挑战并发编程的目的是为了让程序运行的更快,但是,并不是启动更多的线程就能让程序最大限度的并发执行。的实现原理与应用在多线程并发编程中一直是元老级角色,很多人都会称呼它为重量级锁。 并发编程的挑战 并发编程的目的是为了让程序运行的更快,但是,并不是启动更多的线程就能让程序最大限度的并发执行。如果希望通过多线程执行任务让程序运行的更快,会面临非常多的挑战:(1)上下文切换(2)死...
摘要:编译器,和处理器会共同确保单线程程序的执行结果与该程序在顺序一致性模型中的执行结果相同。正确同步的多线程程序的执行将具有顺序一致性程序的执行结果与该程序在顺序一致性内存模型中的执行结果相同。 前情提要 深入理解Java内存模型(六)——final 处理器内存模型 顺序一致性内存模型是一个理论参考模型,JMM和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照。JMM和处理器内...
阅读 1331·2021-09-28 09:43
阅读 4033·2021-09-04 16:41
阅读 1895·2019-08-30 15:44
阅读 3699·2019-08-30 15:43
阅读 756·2019-08-30 14:21
阅读 2016·2019-08-30 11:00
阅读 3293·2019-08-29 16:20
阅读 1890·2019-08-29 14:21