synchronized总结:怎么保证可见性、有序性、原子性?

news2024/11/19 16:28:57

synchronized的原子性

synchronized 底层实际上通过JVM来实现的,同一时间只能有一个线程去执行synchronized 中的代码块。

原子性:既然同一时间只有一个线程去运行里面的代码,那么这个操作就是不能被其它线程打断的,所以这里天然就具有原子性了。

synchronized通过内存屏障保证可见性

老王:小陈啊,之前我们讲volatile的时候说过,volatile的可见性是通过什么来保证的

小陈:这个我还记得啊,volatile是通过内存屏障来保证可见性的Load屏障保证volatile变量每次读取数据的时候都强制从主内存读取Store屏障每次volatile修改之后强制将数据刷新会主内存

小陈:老王啊,难道说synchronized关键字也是通过内存屏障来保证可见性的?

老王:哈哈,小陈你的猜想没错。

我们都知道sychronized底层是通过monitorenter的指令来进行加锁的、通过monitorexit指令来释放锁的

但是很多人都不知道的一点是,monitorenter指令其实还具有Load屏障的作用

也就是通过monitorenter指令之后,synchronized内部的共享变量每次读取数据的时候被强制从主内存读取最新的数据。

同样的道理monitorexit指令也具有Store屏障的作用,也就是让synchronized代码块内的共享变量,如果数据有变更的,强制刷新回主内存。

这样通过这种方式,数据修改之后立即刷新回主内存,其他线程进入synchronized代码块后,使用共享变量的时候强制读取主内存的数据,上一个线程对共享变量的变更操作,它就能立即看到了。

老王:画个图给你看一下,大概是这样子的:

小陈:原来是这样啊,synchronized底层竟然也是通过内存屏障来保证可见性的。

synchronized使用内存屏障来保证有序性

老王:那我再问你,synchronizd是怎么保证有序性的,想必聪明如你,已经知道答案了吧

小陈:哈哈,之前volatile通过内存屏障来保证有序性的,我想synchronized也是吧。

老王:我们知道四条禁止指令重排序的内存屏障,这4条禁止重排序的内存屏障分别为:

StoreStore屏障:禁止StoreStore屏障的前后Store写操作重排

LoadLoad屏障:禁止LoadLoad屏障的前后Load读操作进行重排

LoadStore屏障:禁止LoadStore屏障的前面Load读操作跟LoadStore屏障后面的Store写操作重排

StoreLoad屏障:禁止LoadStore屏障前面的Store写操作跟后面的Load/Store 读写操作重排

同样的道理啊,也是通过monitorenter、monitorexit指令嵌入上面的内存屏障;monitorenter、monitorexit这两条指令其实就相当于复合指令,既具有加锁、释放锁的功能,同时也具有内存屏障的功能。

再画个图给你看一下,是怎么禁止重排序的:

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

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

相关文章

语音芯片怎么录音 以及如何选择合适的录音芯片

一、语音芯片如何录音 语音芯片怎么录音 以及如何选择合适的录音芯片 语音芯片,其中就有一个品类,称之为录音芯片 其实他们是合并在一个芯片里面的,也就是说,录音芯片肯定是又可以录又可以播 但是能播放的语音芯片&#xff0c…

OA——菜单里无法找到流程监控

在门户引擎里面做查看菜单的权限设置 编辑里面的可查看权限管理 把权限给到对应的人员或者部门就可以

恒驰服务 | 华为云数据使能专家服务offering之数仓建设

恒驰大数据服务主要针对客户在进行智能数据迁移的过程中,存在业务停机、数据丢失、迁移周期紧张、运维成本高等问题,通过为客户提供迁移调研、方案设计、迁移实施、迁移验收等服务内容,支撑客户实现快速稳定上云,有效降低时间成本…

python的pytorch和torchvision利用wheel文件安装

python的pytorch和torchvision利用wheel文件安装 在做人工智能的时候,我们需要下载pytorch和torchvision,那么如何下载呢。利用wheel文件pip安装 下载 首先要看你的python版本,打开命令行,输入: python -V就可以看…

ip划分与私公网ip、ip的传递

报文问路:1、不知道跳转默认路由器,2、知道路径,向对应路径发出报文,3、路口路由器,下一步就是目标主机在哪。 想要通信必须同在一个局域网,其实将公网就可以看作一个大型的局域网。 在同一个局域网内发送…

制药、饮料等流程制造业主数据如何管?

业务背景——制造行业的数据转型过程中,主数据管理是成功的必要条件 MASTER DATA MANAGEMENT 流程制造是指被加工对像不间断地通过生产设备,通过一系列的加工装置使原材料进行化学或物理变化,最终得到产品。 由于流程制造中物料的变动性强&a…

C++ 写一个Data类的注意问题

Data类 声明和定义分离的一些问题 声明里面我们不带缺省参数&#xff0c;定义我们给缺省参数&#xff0c;如下面两段代码&#xff1a; Data.h#pragma once #include<iostream> using namespace std; class Data { public:Data(int year,int month,int day);private:in…

Python基础入门例程21-NP21 增加派对名单(二)(列表)

本专栏&#xff1a; Python365基础入门例程 作者&#xff1a;heda3 最近的博文&#xff1a; 1、Python基础入门例程19-NP19 列表的长度&#xff08;列表&#xff09;-CSDN博客 2、Python基础入门例程18-NP18 生成数字列表&#xff08;列表&#xff09;-CSDN博客 3、Pyth…

spring boot配置ssl(多cer格式)保姆级教程

1. 准备cer格式的证书&#xff1b; 2. 合并cer证书并转化成jks格式的证书 为啥有这一步&#xff0c;因为cer证书配置在spring boot项目中&#xff0c;项目启动不起来。如果有大佬想指导一下可以给我留言&#xff0c;在此先谢过大佬。 1&#xff09;先创建一个jks格式的证…

【教学类-19-04】202310《ABAB式-规律排序涂色-A4竖版2份》(中班)

展示效果&#xff1a; 单人使用样式&#xff1a; 单页打印样式 ​ 打印效果&#xff1a; 背景需求&#xff1a; 中班幼儿需要掌握ABAB规律排序&#xff0c;如下图所示&#xff0c;AB两个元素能外形不同、颜色不同。 2022年11月带领中3班&#xff08;现大3班&#xff09;幼…

maven子模块无法导入jar包问题

明明本地仓库有jar包 maven子模块无法导入jar包&#xff0c;然后放到父项目的pom.xml则可以导入 可以试试更新仓库后&#xff0c;引入成功

这款制作电子画册的网站,好用到爆

要是早点发现这款制作电子画册网站该多好啊&#xff01;由于缺乏相关知识和技能&#xff0c;一直没有找到合适的平台。直到最近&#xff0c;偶然发现了这个网站&#xff0c;才发现原来制作电子杂志如此简单 这个网站就是FLBOOK在线制作电子画册平台&#xff0c;它不仅提供了丰富…

PicoDiagnostics (NVH设备软件)-NVH软件计算原理探究

NVH 问题探讨 PicoDiagnostics (NVH设备软件)对于不同驱动方式的车辆、是否通过OBD口读取转速和速度&#xff0c;后轮差速传动比数值对其频率计算原理也是有影响的。究竟什么时候需要填后轮差速传动比呢&#xff1f;下面做一些探讨&#xff1a; 连接OBD诊断口计算速度&频率…

用思维导图成为职业规划达人

今天&#xff0c;我们来聊聊如何用思维导图来做职业规划&#xff1f;在外面进行职业规划的时候&#xff0c;常常包括以下几项自我认知以及定位、职位的要求以及自身与职位之间的匹配程度。 今天我们就用 在线制图工具ProcessOn&#xff0c;来制作这一份职业规划。 自我分析 …

国标发布|法大大参编《第三方电子合同服务平台信息安全技术要求》

2023年9月7日&#xff0c;国家市场监督管理总局联合国家标准化管理委员会&#xff0c;在全国标准信息公共服务平台发布了国家标准《第三方电子合同服务平台信息安全技术要求》&#xff0c;法大大作为主要起草单位、法大大联合创始人兼首席法务官梅臻担任主要起草人参与其中。 &…

基于STC系列单片机实现定时器0扫描数码管显示定时器/计数器1作为计数器1产生频率的功能

#define uchar unsigned char//自定义无符号字符型为uchar #define uint unsigned int//自定义无符号整数型为uint #define NixieTubeSegmentCode P0//自定义数码管段码为单片机P0组引脚 #define NixieTubeBitCode P2//自定义数码管位码为单片机P2组引脚 sbit LED P1^0;//位定义…

云端服务器和本地服务器的区别

随着云计算技术的快速发展&#xff0c;云端服务器已经成为越来越多企业和个人的首选。相较于传统的本 地服务器&#xff0c;云端服务器有着许多不同之处。那么&#xff0c;它们之间到底有哪些区别呢? 1. 部署位置 本地服务器通常部署在用户所在的物理场所&#xff0c;例如公…

c语言基础:L1-063 吃鱼还是吃肉

国家给出了 8 岁男宝宝的标准身高为 130 厘米、标准体重为 27 公斤&#xff1b;8 岁女宝宝的标准身高为 129 厘米、标准体重为 25 公斤。 现在你要根据小宝宝的身高体重&#xff0c;给出补充营养的建议。 输入格式&#xff1a; 输入在第一行给出一个不超过 10 的正整数 N&am…

MySQL扩展语句和约束方式

一、扩展语句 复制&#xff0c;通过like这个语法直接复制bbb的表结构。只是复制表结构&#xff0c;不能复制表里面的数据 把bbb表里面的数据&#xff0c;复制到test&#xff0c;两个表数据结构要一致 创建一张表&#xff0c;test1,数据从bbb来&#xff0c;表结构也是bbb delete…

自动化测试框架之RobotFramework关键字编写

众所周知RobotFramework是关键字驱动&#xff0c;那么关键字的编写在RobotFramework 测试框架进行自动化测试时就非常关键了。如何编写关键字呢&#xff0c;在上节课的基础上&#xff0c;封装post request 请求为关键字&#xff0c;如下 在项目的基础上右键 new----》Robot Re…