Volatile内存语义以及如何正确使用

news2024/11/24 18:18:57

目录

语义描述

重排序规则 

JMM如何实现volatile语义

如何正确使用volatile变量


语义描述

写语义:当写一个volatile变量时候,JMM会把该线程对应的本地内存的共享变量直接刷新到主内存中。

读语义:当读一个volatile变量的时候。JMM会把该线程对应的本地内存置为无效,从而从主内存中读取。

重排序规则 

是否能重排序第二个操作
第一个操作普通变量读/写volatile变量读volatile变量写
普通变量读/写NO
volatile变量读NONONO
volatile变量写NONO

总结

1. 如果第二个操作是volatile变量的写,则不管第一个操作是什么都不可以重排序
2. 如果第一个变量是volatile变量的读,则不管第二个操作是什么都不可以重排序

3. 当第一个操作是volatile变量写,第二个是volatile变量读,则不可以重排序

JMM如何实现volatile语义

为了实现volatile语义,编译器在生成字节码的时候,会在指令序列中插入内存屏障来禁止特定类型的处理器排序。

常见的一些内存屏障以及内存语义可以参考:Java内存模型基础(JMM)_Edgar_HW的博客-CSDN博客Java内存模型https://blog.csdn.net/huangwei2014/article/details/128173421

针对volatile变量的不同操作,会插入不同的内存屏障,详情如下:

1. volatile变量的写操作

  • 在每个写操作的前面加一个StoreStore屏障
  • 在每个写操作的后面加一个StoreLoad屏障 

 一个StoreLoad屏障是一个全能型的屏障,同时具备LoadLoad和LoadStore以及StoreStore效果,同时效率也比较低

2. volatile变量的读操作

  • 在每个读操作的后面加一个LoadLoad屏障
  • 在每个读操作的后面加一个LoadStore屏障

上述的内存屏障策略是相对保守的,在实际执行的时候,只要不改变volatile的内存语义是可以生省略不必要的屏障的

如何正确使用volatile变量

正确使用volatile变量_Edgar_HW的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/80247.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式锁主动续期的入门级实现-自省 | 简约而不简单

一、背景 如果某个客户端获得锁之后处理时间超过最大约定时间,或者持锁期间内发生了故障导致无法主动释放锁,其持有的锁也能够被其他机制正确释放,并保证后续其它客户端也能加锁,整个处理流程继续正常执行。 简单解释一下&#xf…

LLeetCode题目笔记——6258. 数组中最长的方波

文章目录题目描述题目难度——中等方法一:一次遍历哈希代码Python暴力代码Python一次遍历总结题目描述 这是这周周赛的第二题,本来想是不是双指针的解法,但想半天没想出来咋用双指针,就想到了哈希。 给你一个整数数组 nums 。如果…

PostgreSQL数据库TPCC测试,Banchmarksql 5.0部署详解

1 BenchmarkSQL安装部署 1.1 部署Java环境 首先使用java - version查看是否已有 Java环境(下图是有的情况) 需要注意的是,虚拟机中默认的JDK貌似是不行的哦,请参考下面链接中的博文,教你怎么卸载重装 1.1.1 若没有J…

Python学习基础笔记四十四——模块1

1、看一个例子: 创建一个demo.py文件: print(in demo.py)def hello():print(in hello function) 然后我们在另外一个文件中import这个demo文件: import demo# 调用demo.py文件中的hello()函数 demo.hello() 注意,demo后面没有…

软件安全测试-BurpSuite使用详解

1.BurpSuite简介 Burp Suite 是用于攻击web 应用程序的集成平台,它包含了许多Burp工具,这些不同的burp工具通过协同工作,有效的分享信息,支持以某种工具中的信息为基础供另一种工具使用的方式发起攻击。 它主要用来做安全性渗透测…

我将 9 个 ChatGPT 账号接入微信,我现在整个人都麻了...

大家好,我是米开朗基杨。最近大家都被 ChatGPT 刷屏了,这家伙真是上天入地无所不能,不管什么问题都能解答,而且答案的质量非常高,完全不像机器人。于是乎我冒出个想法:如果把 ChatGPT 接入微信是什么感觉&a…

二维码介绍

二维码介绍 二维码(2-dimensional bar code、二维条码)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1…

repo的安装和使用

前言 Android 采用 Gerrit 提供代码评审服务,并且开发了一个客户端工具 repo,实现多仓库管理。Git 的开发者对服务端的 Git 源码做了扩展,使得基于 Git(cgit)的代码平台可以很容易引入新的集中式工作流。同样 git-rep…

概率统计·参数估计【矩估计、极大似然估计、无偏性、有效性、相合性】

点估计 设总体的分布函数形式已知,但它的一个或多个参数为未知,借助于总体的一个样本来估计总体未知参数的值的问题称为点估计问题 矩估计 这个还是看例子会比较好理解一些 例 先μ1E(x),μ2E(x2)有几个未知参数就列几次方的期望&#xff…

CSS -- 01. CSS基础

文章目录CSS基础1 CSS简介1.1 HTML的局限性1.2 CSS介绍1.3 CSS语法规范1.4 CSS代码风格2 CSS基础选择器2.1 选择器的分类2.2 标签选择器2.3 **类选择器**2.4 id选择器2.5 通配符选择器2.6 基础选择器总结3 CSS字体属性3.1 字体系列3.2 字体大小3.3 字体粗细3.4 文字样式3.5 字体…

[附源码]JAVA毕业设计医药垃圾分类管理系统(系统+LW)

[附源码]JAVA毕业设计医药垃圾分类管理系统(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目…

Day827.安全性、活跃性以及性能问题 -Java 并发编程实战

安全性、活跃性以及性能问题 Hi,我是阿昌,今天学习记录的是关于安全性、活跃性以及性能问题的内容。 并发编程中需要注意的问题有很多,主要有三个方面,分别是: 安全性问题活跃性问题性能问题 一、安全性问题 相信一…

论文讲解p2p4

本人水平有限,很多地方可能有说错或者理解错的地方请指出,谢谢谅解 一.原始电路图 1.简介:本电路是从1977年一篇电荷重新分配的理念进化而来,论文如下: All-MOS charge redistribution analog-to-digital conversion techniques. --JAMES L. McCREARY 2.因为从一开始充电过…

Java使用H2数据库全方式汇总

H2是轻量级数据库, 可以不需要安装就可以运行,对于快速学习和演示比较适用。关于H2的基本内容可以参考: H2 数据库简介 。 本篇快速介绍H2数据库在各种类型的Java应用中的使用, 包括: Java 项目Java Web 项目Spring B…

《域渗透攻防指南》签名版预售来啦

千呼万唤始出来!终于,在广大粉丝翘首期盼下,国内首本专门讲述域内攻防的书籍《域渗透攻防指南》在2022年最后一个月和大家见面了。为了回馈粉丝的等待,让粉丝早日拿到心仪的书,特此联合机械工业出版社弄了签名版书预售…

GLAD:部分相干光模拟

概述 一个理想的单色点光源发射的光是完全相干光。但实际物理光源不是点源,总是具有一定的空间尺度并包含众多辐射单元,其发出的光也非严格的单色光,其光谱具有一定宽度,这种光即部分相干光。产生部分相干光主要有三种方法: …

Python中常用的内置函数集合

这篇文章主要介绍了Python中常用的内置函数,主要介绍内容有map()、filter()、all()、int()等更多相关函数,需要的小伙伴可以看看。 一、map() map(func,iterable),其中func为函数名,可为lambda匿名函数,iterable为可迭…

全栈Jmeter接口测试(二):jmeter组件元件介绍,利用取样器中http发送请求

JMeter 的主要测试组件总结如下: 1. 测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器 2. 线程组代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的 请求内容在Sampler中定义,它被线程组包含…

Camtasia Studio2023电脑屏幕录制软件免费版

TechSmith Camtasia Studio2023免费的屏幕录像视频编辑软件,最专业的电脑屏幕录制及编辑软件!这款专业录屏与视频创作大型软件包含屏幕录像、视频编辑、视频菜单制作、视频录音配音、视频发布等系列强大功能。 全新的Camtasia 2023 让您用更短的时间创…

【图像隐写】GBT+SVD数字水印嵌入与提取【含Matlab源码 1668期】

⛄一、SVD数字水印简介 理论知识参考文献:基于DWT和SVD的彩色图像数字水印算法研究 一种基于DWT-SVD的图像数字水印算法 ⛄二、部分源代码 clc close all clear %% Input images Iimread(‘Lena.jpg’); Iimresize(I,[512,512]); logorandsrc(8,8,[0,1]); figur…