Java volatile关键字分析

每个线程创建时,JVM会为其创建一份私有的工作内存(栈空间),不同线程的工作内存之间不能直接互相访问
JMM规定所有的变量都存在主内存,主内存是共享内存区域,所有线程都可以访问
线程对变量进行读写,会从主内存拷贝一份副本到自己的工作内存,操作完毕后刷新到主内存。所以,线程间的通信要通过主内存来实现。
volatile的作用是:线程对副本变量进行修改后,其他线程能够立刻同步刷新最新的数值。这个就是可见性。

结构图如下:

共享变量图片
能够保存可见性,但不能保持原子性,如果变量有先后顺序的话可能会发现运行错误

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

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

相关文章

Rocketmq Filter 消息过滤(TAGS、SQL92)原理详解 源码解析

1. 背景 1.1 Rocketmq 支持的过滤方式 Rocketmq 作为金融级的业务消息中间件,拥有强大的消息过滤能力。其支持多种消息过滤方式: 表达式过滤:通过设置过滤表达式的方式进行过滤 TAG:根据消息的 tag 进行过滤。SQL92&#xff1a…

windows服务器自动重启?

在使用电脑过程中,很多玩家都遇到过系统无故自动重启的情况,实际上引起计算机重启的原因有多种,其中硬件方面原因大致有以下几条。 1、电源是引起系统自动重启的最大嫌疑之一。 劣质的电源不能提供足够的电量,当系统中的设备增多…

【雕爷学编程】MicroPython动手做(33)——物联网之天气预报

天气(自然现象) 是指某一个地区距离地表较近的大气层在短时间内的具体状态。而天气现象则是指发生在大气中的各种自然现象,即某瞬时内大气中各种气象要素(如气温、气压、湿度、风、云、雾、雨、闪、雪、霜、雷、雹、霾等&#xff…

【docker】设置 docker 国内镜像报错问题,解决方案

一、报错: [rootlocalhost ~]# systemctl restart docker Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.二、原因&#xf…

24届近5年江南大学自动化考研院校分析

今天给大家带来的是江南大学控制考研分析 满满干货~还不快快点赞收藏 一、江南大学 学校简介 江南大学(Jiangnan University)是国家“双一流”建设高校,“211工程”、“985工程优势学科创新平台”重点建设高校,入选…

Windows新版文件资源管理器经常在后台弹出的临时解决方案

禁用组策略自动刷新 运行gpedit.msc找到计算机配置->管理模板->系统->组策略找到 “关闭组策略的后台刷新”启用 参考 https://answers.microsoft.com/en-us/windows/forum/all/windows-11-most-recently-opened-explorer-window/26e097bd-1eba-4462-99bd-61597b5…

C#打开文件对话框、保存文件对话框、字体以及颜色对话框

打开文件对话框 //创建打开文件的对象OpenFileDialog openFileDialog new OpenFileDialog();openFileDialog.Title "请选择要打开的文件";//设置对话框标题openFileDialog.Multiselect true; //设置对话框可以多选openFileDialog.InitialDirectory "C:\Use…

echarts-pie---------3D曲状环形饼图实现!!!

示例(参考此处饼图修改https://www.isqqw.com/viewer?id37497) 话不多说直接上代码 此套代码可以直接再echarts官网中的此处运行 let selectedIndex ; let hoveredIndex ; option getPie3D([{name: 数学,value: 60,itemStyle: {color: #1890FF,},},{…

【万字长文】SpringBoot整合Atomikos实现多数据源分布式事务(提供Gitee源码)

前言:在最近的实际开发的过程中,遇到了在多数据源的情况下要保证原子性的问题,这个问题当时遇到了也是思考了一段时间,后来通过搜集大量资料与学习,最后是采用了分布式事务来解决这个问题,在讲解之前&#…

GD32F103VE外部中断

GD32F103VE外部中断线线0~15,对应外部IO口的输入中断。它有7个中断向量,外部中断线0 ~ 4分别对应EXTI0_IRQn ~ EXTI4_IRQn中断向量;外部中断线 5 ~ 9 共用一个 EXTI9_5_IRQn中断向量;外部中断线10~15 共用一个 EXTI15_10_IRQn中断…

使用TDOSCommand调用Powershell脚本对进程进行操作

列出当前运行的进程: varPowerShellPath, ScriptPath, CommandLine: string; beginMemo6.Clear;PowerShellPath : powershell.exe ; // 假设 PowerShell 可执行文件在系统环境变量中// 构造命令行参数CommandLine : Get-Process | Select-Object Name,Id;// 设置命…

计算机网络—HTTP

这里写目录标题 HTTP是什么HTTP常见状态码HTTP常见字段GET与POST的区别Get和Post是安全和幂等吗PUT幂等,不安全DELETE幂等,不是安全 HTTP缓存技术HTTP缓存实现技术 HTTP1.0优缺点和性能HTTP1.1优缺点和性能HTTP2优缺点和性能HTTP3优缺点和性能HTTP和HTTP…

C#多线程并发【深入浅出实战】

创建一个线程 Task的创建和执行方式有如下三种: 可以带参数 public void testTask(string[] args){//1.new方式实例化一个Task,需要通过Start方法启动Task task new Task(() >{Thread.Sleep(100);Console.WriteLine($"hello, task1的线程ID为{…

Linux常见指令

目录 linux调试内存堆栈 在gdb下如何调用堆栈 查找当前目录下所有.c文件并列出来 如何看一个进程打开了哪些文件 查看本机的 CPU 使用状态 查看端口号的链接状态 linux调试内存堆栈 堆栈向量检测是一项重要的调试技术,主要是利用进程堆栈内存中的特定内容来帮…

Golang之路---04 并发编程——信道死锁经典错误案例

信道死锁经典错误案例 错误示例一 看下面这段代码 package mainimport "fmt"func main() {pipline : make(chan string)pipline <- "hello world"fmt.Println(<-pipline) }运行会抛出错误&#xff0c;如下 fatal error: all goroutines are asle…

SHGetFileInfo函数获取48x48图标并在ListControl平铺视图中显示

VS2010工程下载链接&#xff1a;https://pan.baidu.com/s/1ACXQSpoNdFVFLdvWntT7mA?pwdwfy5 C语言写法&#xff1a; #define COBJMACROS #include <stdio.h> #include <Windows.h> #include <CommCtrl.h> #include <commoncontrols.h>HICON load_ic…

不可错过!12个编写整洁Java代码的最佳实践方法

在软件开发领域摸爬滚打了这些年之后&#xff0c;通过与各类开发者合作&#xff0c;审查他们所编写的代码所累积的经验&#xff0c;使飞哥对整洁代码的理解和认识有了本质的提升。 引用《代码整洁之道》中的一段话&#xff0c;实际上&#xff0c;我们花在阅读代码上的时间远远超…

sqlalchemy------操作表(增删查改)

第一步&#xff1a;创建engine对象 连接数据库 engine create_engine("mysqlpymysql://root:123127.0.0.1:3306/db001?charsetutf8",max_overflow0, # 超过连接池大小外最多创建的连接pool_size5, # 连接池大小pool_timeout30, # 池中没有线程最多等待的时…

Spring高手之路12——BeanDefinitionRegistry与BeanDefinition合并解析

文章目录 1. 什么是BeanDefinitionRegistry&#xff1f;2. BeanDefinitionRegistry 的使用2.1 BeanDefinitionRegistry 简单例子2.2 有关ImportBeanDefinitionRegistrar的实现类的例子 3. BeanDefinition的合并3.1 调试验证BeanDefinition的合并3.2 BeanDefinition合并的目的 4…