当前位置: 首页 > news >正文

volatile和synchronized的区别

volatile和synchronized的区别

  • 并发编程三个特性:
  • 原子性
  • 有序性
  • 可见性
  • Violated
  • Synchronized
  • 区别对比

并发编程三个特性:

原子性、有序性、可见性

原子性

volatile无法保证原子性

synchronized排它锁,被synchronzied修饰的代码不能被打断,所以具有原子性

有序性

volatile禁止JVM编译器及处理器对volatile修饰的指令重排序

synchronzied是以程序的串行化执行来保证顺序性的,synchronized代码块中的代码是可以重排序的

可见性

volatile使用机器指令lock将修改后的工作内存中的数据强制刷新到主内存,并迫使其他线程的工作内存数据失效,从而保证可见性

synchronized借助jvm指令monitorenter和monitorexit使代码串行化,在monitorexit时所有共享资源都将刷新的到主内存,从而保证可见性

Violated

一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:

  1. 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这个新的值对其他线程来说是可见的。
  2. 禁止进行指令重排序

volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中获取

Synchronized

锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住

区别对比

  1. volatile仅能使用在变量级别,synchronized则可以使用在变量、方法类级别
  2. volatile仅能实现变量的修改可见性,并不能保证原子性synchronized则可以既保证变量的修改可见性和原子性
  3. volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞
  4. volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化

参考资料:请说说volatile和synchronized的区别?

相关文章:

volatile和synchronized的区别

volatile和synchronized的区别并发编程三个特性:原子性有序性可见性ViolatedSynchronized区别对比并发编程三个特性: 原子性、有序性、可见性 原子性 volatile无法保证原子性。 synchronized是排它锁,被synchronzied修饰的代码不能被打断…...

Cadence Allegro 导出Unplaced Component Report报告详解

⏪《上一篇》   🏡《上级目录》   ⏩《下一篇》 目录 1,概述2,Unplaced Component Report作用3,Unplaced Component Report示例4,Unplaced Component Report导出方法4.1,方法14.2,方法2B站关注“硬小二”浏览更多演示视频...

面试了上百位性能测试后,我发现了一个令人不安的事实...

在企业中负责技术招聘的同学,肯定都有一个苦恼,那就是招一个合适的测试太难了!若要问起招哪种类型的测试最难时,相信很多人都会说出“性能测试”这个答案。 每当发布一个性能测试岗位,不一会就能收到上百份简历&#…...

天气预报查询 API + AI 等于王炸(一大波你未曾设想的天气预报查询 API 应用场景更新了)

前言 近年来,随着信息化进程的不断深入,人们对于信息的获取和处理需求越来越高。而其中,天气查询API是一个非常重要的服务,它能够帮助人们快速获取所在位置的天气情况,同时也为各类应用提供了必要的气象数据支持。 本…...

跨境电商的行业现状与发展趋势分析

随着互联网的不断发展,跨境电商作为一种全新的商业模式已经逐渐崭露头角。跨境电商的出现,让越来越多的商家看到了扩大市场的机会,也为消费者提供了更加便利、更加优质的购物体验。本文将从跨境电商的定义、行业现状、发展趋势等方面进行探讨…...

适配器设计模式

目录 前言: 适配器原理与实现 适配器模式的应用场景 1.封装有缺陷的接口 2.统一多个类的接口设计 3.替换依赖的外部系统 4.兼容老版本接口 5.适配不同格式的数据 代理、桥接、装饰器、适配器 4 种设计模式的区别 参考资料 前言: 适配器模式这个模…...

代码随想录算法训练营第三十五天-贪心算法4| ● 860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球

860.柠檬水找零 参考视频:贪心算法,看上去复杂,其实逻辑都是固定的!LeetCode:860.柠檬水找零_哔哩哔哩_bilibili 解题思路: 只需要维护三种金额的数量,5,10和20。 有如下三种情…...

2023MathorcupC题电商物流网络包裹应急调运与结构优化问题建模详解+模型代码(一)

电商物流网络包裹应急调运与结构优化问题 第三次继续写数模文章和思路代码了,不知道上次美赛和国赛大家有没有认识我,没关系今年只要有数模比赛艾特我私信我,要是我有时间我一定免费出文章代码好吧!博主参与过十余次数学建模大赛…...

软件测试技术之跨平台的移动端UI自动化测试(上)

摘要:本文提出一种跨平台的UI自动化测试方案,一方面使用像素级的截图对比技术,解决传统UI自动化测试难以验证页面样式的问题;另一方面用统一部署在服务器端的JavaScript测试代码代替Android和iOS测试代码,大大提高编写…...

【MySQL--02】库的操作

文章目录1.库的操作1.1创建数据库1.2创建数据库的案例1.3字符集和校验规则1.3.1查看系统默认字符集以及校验规则1.3.2查看数据库支持的字符集1.3.3查看数据库支持的字符集校验规则1.3.4 校验规则对数据库的影响1.4操纵数据库1.4.1查看数据库1.4.2 删除数据库1.4.3显示创建语句1…...

人民链Baas服务平台上线,中创助力人民数据共建数据服务应用场景

人民链2.0是数据要素大发展时代下的可信联盟链 作为区块链分布式存储领域行业先驱与让人民放心的国家级数据云平台,中创算力与人民数据的合作从未间断。为了推动人民链2.0高质量发展,中创算力与人民数据开展了多方面合作,助力人民数据共建数据…...

说说如何借助webpack来优化前端性能?

通过webpack优化前端的手段有: ① JS代码压缩 ② CSS代码压缩 ③ HTML文件代码压缩 ④ 文件大小压缩 ⑤ 图片压缩 ⑥ Tree Shaking ⑦ 代码分离 ⑧ 内联 chunk 1、JS代码压缩 terser是一个JavaScript的解释、绞肉机、压…...

AiDD AI+软件研发数字峰会开启编程新纪元

随着OpenAI 推出全新的对话式通用人工智能工具——ChatGPT火爆出圈后,人工智能再次受到了工业界、学术界的广泛关注,并被认为向通用人工智能迈出了坚实的一步,在众多行业、领域有着广泛的应用潜力,甚至会颠覆很多领域和行业&#…...

【远程开发】VSCode使用Remote SSH远程连接Linux服务器

文章目录前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar4.2 创建隧道映射4.3 测试公网远程连接5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程转发自CSDN远…...

C++纯虚函数和抽象类详解

在C中,可以将虚函数声明为纯虚函数,语法格式为: virtual 返回值类型 函数名 (函数参数) 0; 纯虚函数没有函数体,只有函数声明,在虚函数声明的结尾加上0,表明此函数为纯虚函数。 最后的0并不表示函数返回…...

服务器上搭建jenkins打包工具

一、环境准备 1.安装jdk,这里我安装的jdk8 https://www.oracle.com/java/technologies/downloads/#java8 2.安装jenkins,使用镜像地址安装 https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/?CN&OD 注意要选择支持当前安装的jdk版…...

全球化背景下,如何利用内容营销促进跨境电商业务增长

随着全球跨境电商市场的迅速发展,越来越多的企业开始将注意力转向跨境电商。然而,随着竞争的激烈化,企业不再能够仅仅依靠产品本身来吸引消费者的注意。因此,内容营销成为了跨境电商企业在吸引、留住消费者方面的关键。在这篇文章…...

数据库系统工程师——第二章 程序语言基础知识

文章目录📂 第二章、程序语言基础知识 📁 2.1 程序语言概述 📖 2.1.1 程序语言的基本概念 📖 2.1.2 程序语言的基本成分 📁 2.2 程序语言翻译基础 📖 2.2.1 汇编程序基本原理 📖 2.2.2 编译程序…...

UFT参数化的使用

使用Systemutil.Run打开程序。将01_Login/02_New Order/03_Logout三个操作分为3个Action。生成共享对象库关联到这三个Action。在01_Login操作模块中,将登录名和密码设置为环境变量参数,环境变量参数采用用户自定义,定义为AgentName和Passwor…...

Java模拟rank() over()函数获取分组排名的方法设计及实现

背景 考试批次班级姓名语文202302三年一班张小明130.00202302三年一班王二小128.00202302三年一班谢春花136.00202302三年二班冯世杰129.00202302三年二班马功成130.00202302三年二班魏翩翩136.00 假设我们有如上数据,现在有一个需求需要统计各学生语文单科成绩在班…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

Go语言多线程问题

打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

数据分析六部曲?

引言 上一章我们说到了数据分析六部曲,何谓六部曲呢? 其实啊,数据分析没那么难,只要掌握了下面这六个步骤,也就是数据分析六部曲,就算你是个啥都不懂的小白,也能慢慢上手做数据分析啦。 第一…...

【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space

问题:IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案:将编译的堆内存增加一点 位置:设置setting-》构建菜单build-》编译器Complier...

【Vue】scoped+组件通信+props校验

【scoped作用及原理】 【作用】 默认写在组件中style的样式会全局生效, 因此很容易造成多个组件之间的样式冲突问题 故而可以给组件加上scoped 属性, 令样式只作用于当前组件的标签 作用:防止不同vue组件样式污染 【原理】 给组件加上scoped 属性后…...