深入理解 Java 中的 `volatile` 关键字:可见性与有序性的保障
深入理解 Java 中的 volatile 关键字:可见性与有序性的保障
volatile主要做了两个事情可见性保证 和 有序性
可见性保证就是: 对volatile的写操作会对其他线程可见。
简单来说我们A线程的修改了volatile的值,那么我B线程也可以看见。
有序性: 有序性就是他确保了一个对volatile之前所有的写操作
简单来说
int a = 0;
volatile int v = 0;
a = 1;
v = 1;
volatile确保了让CPU先执行a=1彻底写进主内存然后在执行v=1
为什么一定要保证有序性?
因为在多线程编程有序性是确保操作按照预期执行的重要机制。
class Example {int a = 0;volatile boolean flag = false;public void writer() {a = 1; // 1flag = true; // 2}public void reader() {if (flag) { // 3int i = a; // 4// i should be 1}}
}
这个线程一个执行writer方法, 另一个执行reader方法,wirter方法中,写操作a=1操作会在flag=true之前,如果没有volatile的保证,我们的CPU可能会重排序这些操作,可能我们的flag先执行了, 然后在执行v=1;因为我们的编译器和CPU可能会对我们非volatitle变量进行重排序优化性能,所以可能执行的顺序不是我们预期想要的。
如何保证有序性?
volatile是通过内存屏障实现可见性的,。
写屏障
确保我们volatile之前所有写操作都同步到主内存了,同步到主内存就有了可见性了。
读屏障
确保这个读操作回从主内存读到最新的数据。包括在读屏障后的所有代码也会也会从主内存读,哪怕不是volatile
可见性
对volatile变量写操作会立刻刷新到主内存
每次volatile读取都是从主内存读取,而不是线程的缓存
如果我不想从主内存读了或者写进我该怎么办
volatile 适合用于控制标志(flag)变量,这些变量通常用于线程间的简单状态检查和控制。
public class VolatileExample {private volatile boolean flag = false;public void setFlagTrue() {flag = true;}public void doWork() {while (!flag) {// do some work}// flag is true, proceed with next step}
}
相关文章:
深入理解 Java 中的 `volatile` 关键字:可见性与有序性的保障
深入理解 Java 中的 volatile 关键字:可见性与有序性的保障 volatile主要做了两个事情可见性保证 和 有序性 可见性保证就是: 对volatile的写操作会对其他线程可见。 简单来说我们A线程的修改了volatile的值,那么我B线程也可以看见。 有序…...
1077: 平衡二叉树的判定
解法: 平衡二叉树是一种特殊的二叉树,它满足以下两个条件: 左子树和右子树的高度差不超过1(即,左右子树高度差的绝对值不超过1)。左子树和右子树都是平衡二叉树。 后序遍历过程中每次判断左右子树高度差…...
深度学习-Softmax回归+损失函数+图像分类数据集
目录 Softmax回归回归 VS 分类Kaggle上的分类问题 从回归到多类分类回归分类从回归到多类分类-均方损失从回归到多类分类-无校验比例从回归到多类分类-校验比例 Softmax和交叉熵损失总结损失函数均方损失绝对值损失函数鲁棒损失 图像分类数据集通过框架中内置函数将FashionMNIS…...
【论文解读】Overview of the Scalable Video Coding Extension of the H.264/AVC Standard
介绍 该篇论文是一篇关于H.264/AVC标准可扩展视频编码(SVC)扩展的综述论文,由Heiko Schwarz、Detlev Marpe和Thomas Wiegand撰写,发表在《IEEE Transactions on Circuits and Systems for Video Technology》2007年9月第17卷第9期上。 论文解读 摘要: H.264/AVC视频编…...
【C语言】程序员自我修养之文件操作
【C语言】程序员自我修养之文件操作 🔥个人主页:大白的编程日记 🔥专栏:C语言学习之路 文章目录 【C语言】程序员自我修养之文件操作前言一.文件介绍1.1为什么使用文件1.2文件分类1.3二进制文件和文本文件 二.文件的打开和关闭2.…...
一种获取java代码结构的实现思路
一种获取java代码结构的实现思路 有时,我们需要获取java文件里的代码结构,即,只需要里面的class定义、方法声明、属性定义。不需要额外的方法实现 这里提供一下实现思路: 采用语法解析器Tree-sitter对java代码进行解析,获取里面的方法实现遍历第一步获取到的方法列表,在源…...
MySQL---增删改查
MySQL是一个流行的关系型数据库管理系统,它使用结构化查询语言(SQL)来管理数据库中的数据。以下是MySQL中增删改查(CRUD)操作的基本命令: 创建(Create): 创建新表:CREATE TABLE table_name (column1 datatype,column2 datatype,...PRIMARY KEY (column) );插入数据:…...
C#编程-.NET Framework使用工具类简化对象之间的属性复制和操作
在C#编程中,对象之间的属性复制和操作是一个常见的需求。为此,.NET Framework提供了多种实用工具库,如AutoMapper、ValueInjecter和ExpressMapper。这些库通过简化代码,提高了开发效率。本文将介绍这些工具库,比较它们…...
爬虫基本原理及requests库用法
文章目录 一、爬虫基本原理1、什么是爬虫2、爬虫的分类3、网址的构成4、爬虫的基本步骤5、动态【异步】页面和静态【同步】页面6、请求头 二、requests基本原理及使用1、chrome 抓包按钮详解1.1 Elements1.2 元素定位器1.3 Network1.4 All1.5 XHR1.6 Preserve log1.7 手机模式1…...
spring和springboot、springcloud版本关系
进入新公司,看底层框架代码时,想了解spring的版本,很好奇这些版本之间时怎么对应的,因为不同版本应该有依赖关系,用得不对可能代码会有隐藏问题。 Spring、SpringBoot和SpringCloud的版本不一致,并且需要搭…...
视频监控汇聚平台LntonCVS通过GB/T28181国标协议实现视频监控平台的级联方案
近年来,随着网络视频监控应用范围的拓展,越来越多的政府部门和跨区域行业单位对视频监控的需求已经不局限于本地联网监控。他们正在探索在原有的本地联网监控基础上,建设省级乃至全国范围内的跨区域监控联网,以全面打造数据共享平…...
【精品】使用 v-md-editor 上传图片
简介 v-md-editor 是基于 Vue 开发的 markdown 编辑器组件,即支持vue2也支持vue3。 gitee:https://gitee.com/ckang1229/vue-markdown-editor文档:https://code-farmer-i.github.io/vue-markdown-editor/zh/ 服务器端代码 RestController…...
STM32——DAC篇(基于f103)
技术笔记! 一、DAC简介(了解) 1.1 DAC概念 传感器信号采集改变电信号,通过ADC转换成单片机可以处理的数字信号,处理后,通过DAC转换成电信号,进而实现对系统的控制。 1.2 DAC的特性参数 1.3…...
突然提示由于找不到msvcr120.dll,无法继续执行代码有什么办法可以解决?
msvcr120.dll是Microsoft Visual C 2013 Redistributable Package的一部分,它包含了运行时库,用于支持使用Visual C 2013开发的应用程序。如果电脑突然提示由于找不到msvcr120.dll,无法继续执行代码有什么办法可以解决?以下是关于msvcr120.dl…...
swig4.2.1压缩包中里面没有找到swig.exe
官网:Simplified Wrapper and Interface Generator C转 C# 采用Swig.exe 打开Example示例的解决方案:sln 生成 即可查看如何调用和使用.i文件 但是:迅雷不管下载哪个版本都是没有exe 官网说了自带。很迷很迷~ 下载其他版本的时候发现&…...
Vue文本溢出如何自动换行
css新增 word-break: break-all; word-wrap: break-word;...
【系统架构师】-论文-系统安全性与保密性设计
1、摘要: 2018 年初,我所在的公司为一票务公司开发开票业务平台的建设。我在该项目中担任系统架构设计师的职务,主要负责设计平台系统架构和安全体系架构。该平台以采用 B/S 架构服务用户,采用”平台应用”的模式解决现有应用单机独立开票的模…...
Cisco Catalyst 9000 9200 9300 9400 IOS software upgrade
1 背景 从Catalyst 3650 ,3850,Catalyst 9000开始, 更准确的说是IOS XE的交换机的系统镜像安装方式分为2种 Bundle mode Install mode 这2种方工啥区别? Bundle mode 传统方式利用boot system flash:c9k.xx16.bin方式引导 Install mode 将bin文…...
Web Server项目实战2-Linux上的五种IO模型
上一节内容的补充:I/O多路复用是同步的,只有调用某些API才是异步的 Unix/Linux上的五种IO模型 a.阻塞 blocking 调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停地去检查这个函数有没有返回,…...
Docker | 基础指令
环境:centos8 参考: 安装 Docker | Docker 从入门到实践https://vuepress.mirror.docker-practice.com/install/ 安装Docker 卸载旧版本,安装依赖包,添加yum软件源,更新 yum 软件源缓存,安装 docker-ce…...
5分钟快速获取微信数据库密钥:Sharp-dumpkey完整指南
5分钟快速获取微信数据库密钥:Sharp-dumpkey完整指南 【免费下载链接】Sharp-dumpkey 基于C#实现的获取微信数据库密钥的小工具 项目地址: https://gitcode.com/gh_mirrors/sh/Sharp-dumpkey 当你的微信聊天记录被加密锁定,无法备份或迁移时&…...
3种免费方法解锁加密音乐:Unlock-Music让你的音乐重获自由
3种免费方法解锁加密音乐:Unlock-Music让你的音乐重获自由 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: h…...
邮件安全联防预警平台“网哨M01”:全面联防对抗社工钓鱼攻击
数字化时代,电子邮件是办公协同、政企协作的重要通信手段,但也是网络攻击的常见突破口。结合社会工程学(简称“社工”)的钓鱼邮件,以隐蔽、迷惑性强的特点,严重威胁个人财产与企业信息安全,防御…...
USB扩展坞
usb中引脚含意DP表示USB的差分信号线正极DM表示USB的差分信号线负极差分对布线:大于设置的距离,使用等长调节每一个晶振都要放置...
收藏!2026大模型风口来了,小白程序员如何抓住高薪机会?必看!
文章指出2026年是技术红利年,大模型领域竞争格局变化明显。国内开源模型如DeepSeek、GLM等取得巨大进展,领先全球。从业者待遇提升,应届生薪酬普遍破百万。招聘方更看重新技能,如万亿MoE、Agent等。文章强调AGI的核心是通用性&…...
东南大学论文模板终极指南:8倍效率完成毕业论文格式排版
东南大学论文模板终极指南:8倍效率完成毕业论文格式排版 【免费下载链接】SEUThesis 东南大学论文模板 项目地址: https://gitcode.com/gh_mirrors/seu/SEUThesis 东南大学论文模板(SEUThesis)是东南大学官方验证的学术论文格式解决方…...
抖音内容保存技术方案:开源下载工具深度解析与应用实践
抖音内容保存技术方案:开源下载工具深度解析与应用实践 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…...
东南大学论文模板终极指南:8倍效率完成毕业论文排版的完整解决方案
东南大学论文模板终极指南:8倍效率完成毕业论文排版的完整解决方案 【免费下载链接】SEUThesis 东南大学论文模板 项目地址: https://gitcode.com/gh_mirrors/seu/SEUThesis 东南大学SEUThesis论文模板库是东大学子必备的学术写作神器,它能将论文…...
意法半导体STM32F407VET6代理商
在当今快速发展的电子行业中,选择一家可靠且专业的微控制器(MCU)供应商至关重要。对于那些正在寻找意法半导体STM32F407VET6系列单片机解决方案的企业而言,深圳市粤科源兴科技有限公司凭借其优质的服务、合理的价格及充足的库存量…...
csp信奥赛C++高频考点专项训练之前缀和差分 --【二维前缀和】:领地选择
csp信奥赛C高频考点专项训练之前缀和&差分 --【二维前缀和】:领地选择 题目描述 作为在虚拟世界里统帅千军万马的领袖,小 Z 认为天时、地利、人和三者是缺一不可的,所以,谨慎地选择首都的位置对于小 Z 来说是非常重要的。 首…...
