Java锁的升级流程详解:无锁、偏向锁、轻量级锁、重量级锁
在Java中,为了在多线程并发场景下既保证线程安全,又尽可能提高性能,JVM针对synchronized实现了锁的优化升级机制。
锁可以从无锁逐步升级到偏向锁、轻量级锁,最后是重量级锁。
话不多说,发车!
一、无锁(Unlocked)
无锁,顾名思义,表示对象处于未加锁状态。
特点:对象正常状态,没有线程竞争。
适用场景:对象没有被任何线程加锁的情况下,大家可以自由访问。
性能:最快,不需要任何同步开销。
在jdk1.6之后默认是开启的
二、偏向锁(Biased Lock)
偏向锁是JDK 1.6引入的一种锁优化手段。
它假设大部分情况下,锁都是由同一个线程持有的,所以不做真正的同步操作,只在对象头中记录线程ID。
加锁流程:
第一个线程访问时,JVM会偏向该线程,记录它的线程ID。
后续该线程进入同步块时,只需快速判断对象头是否偏向自己即可,无需CAS或其他同步。
->什么时候会变成轻量级锁呢?
如果有另一个线程也尝试访问该对象,偏向锁会被撤销,进入轻量级锁阶段。
三、轻量级锁(Lightweight Lock)
轻量级锁是为了优化低竞争场景下的性能开销。
它通过CAS(Compare-And-Swap)操作,避免线程挂起和唤醒。
加锁流程:
线程在自己的栈帧中创建锁记录(Lock Record)。
尝试通过CAS,将对象头Mark Word指向自己的锁记录。
成功 → 轻松拿到锁。
失败(有竞争) → 可能膨胀为重量级锁。
解锁流程:
使用CAS把对象头恢复到原状态。
如果在锁期间没有其他线程参与竞争,解锁非常快。
四、重量级锁(Heavyweight Lock)
重量级锁是最传统、最可靠的锁机制,也叫做Monitor锁。
一旦竞争激烈,轻量级锁无法维持,就会膨胀成重量级锁。
加锁流程:
线程在获取锁失败后,挂起自己,进入阻塞状态。
等待持有锁的线程释放后,再重新被唤醒,竞争锁资源。
最后附上一张图,锁的升级流程
相关文章:
Java锁的升级流程详解:无锁、偏向锁、轻量级锁、重量级锁
在Java中,为了在多线程并发场景下既保证线程安全,又尽可能提高性能,JVM针对synchronized实现了锁的优化升级机制。 锁可以从无锁逐步升级到偏向锁、轻量级锁,最后是重量级锁。 话不多说,发车! 一、无锁&am…...
terraform local-exec与remote-exec详解
在 Terraform 中,local-exec 和 remote-exec 是两种常用的 provisioner(资源调配器),用于在资源创建前后执行脚本或命令。它们的核心区别在于执行位置:local-exec 在运行 Terraform 的本地机器上执行命令,而…...
武装Burp Suite工具:APIKit插件_接口安全扫描.
武装Burp Suite工具:APIKit插件_接口安全扫描. API安全是指通过技术手段和管理措施保护应用程序接口(API)免受未授权访问、数据泄露或恶意攻击的防护体系,核心措施包括身份认证(如OAuth2.0/JWT)、权限控制…...
数据库系统概论|第三章:关系数据库标准语言SQL—课程笔记6
前言 经过前面几篇文章的介绍,已经完成了对于数据查询操作的介绍,接下来,本篇文章将介绍数据更新这一板块,包括插入数据、修改数据以及删除数据三种操作方法。 注:本文中所涉及的数据库前文中已经介绍(指…...
如何在idea中写spark程序
1. 安装配置 Java 和 Scala Java:确保已安装合适版本的 Java Development Kit(JDK),并配置好 JAVA_HOME 环境变量。Scala:由于 Spark 常用 Scala 语言编写,需安装 Scala 开发环境。可在 IDEA 中通过 Se…...
Linux428 chmod 0xxx 1xxx 2xxx 4xxx;umask;chown 属主属组 软件包rpm
sudo: 账户过期,或 PAM 配置缺少 sudo 使用的“account”节,联系您的系统管理员 这样子有没有用嘞 不行 为什么使用caozx26用户sudo修改了shop文件夹强制位,shop文件夹权限中不显示 成功了?真奇怪 查看文件夹权限用 -ld ch…...
基于强化学习的用于非刚性图像配准的引导式超声采集|文献速递-深度学习医疗AI最新文献
Title 题目 Guided ultrasound acquisition for nonrigid image registration usingreinforcement learning 基于强化学习的用于非刚性图像配准的引导式超声采集 01 文献速递介绍 超声成像通常用于引导手术和其他医疗程序,在这些过程中,临床医生会持…...
Shell脚本-嵌套循环应用案例
在Shell脚本编程中,嵌套循环是一种强大的工具,可以用于处理复杂的任务和数据结构。通过在一个循环内部再嵌套另一个循环,我们可以实现对多维数组、矩阵操作、文件处理等多种高级功能。本文将通过几个实际的应用案例来展示如何使用嵌套循环解决…...
QTableView复选框居中
目录 方法一:QSS方法2:自定义复选框委托类一、构造函数 CheckBoxDelegate()二、paint() 方法三、editorEvent() 方法四、关键设计要点五、扩展应用场景六、代码示例(补充) 方法一:QSS QTableView::indicator {position: relative…...
C语言教程(十八):C 语言共用体详解
一、共用体的定义 共用体的定义和结构体类似,使用 union 关键字,其基本语法如下: union 共用体名 { 数据类型 成员1; 数据类型 成员2; // 可以有更多成员 }; 以下是一个简单的共用体定义示例: union Data {int i;float f;char …...
企业办公系统开发如何重塑现代工作方式?
随着工作方式的革新,企业办公软件开发已成为提升组织效率的核心驱动力。从基础的文档处理到复杂的协同办公平台开发,现代办公系统正在彻底改变传统工作模式。本文将深入解析办公类软件的关键技术与发展趋势。 一、企业级办公系统开发的核心模块 专业的O…...
springboot 实现敏感信息脱敏
记录于2025年4月28号晚上--梧州少帅 1. 定义枚举类: public enum DesensitizeType {NAME, EMAIL } 2. 创建自定义注解: 用于标记需要脱敏的字段及其类型。 Retention(RetentionPolicy.RUNTIME) JacksonAnnotationsInside JsonSerialize(using Desen…...
JavaWeb学习打卡-Day5-Spring事务管理、SpringAOP
Spring事务管理 Transactional注解 位置:业务层(Service)的方法上、类上、接口上。作用:将当前方法交给spring进行事务管理,方法执行前,开启事务;成功执行完毕,提交事务࿱…...
项目立项管理
项目立项管理是对拟规划和实施的项目技术上的先进性、适用性,经济上的合理性、效益性,实施上的可能性、风险性以及社会价值的有效性、可持续性等进行全面科学的综合分析,为项目决策提供客观依据的一种技术经济研究活动。 一般包括项目建议与…...
一文梳理业财融合在财务管理中的运用!
目录 一、业财融合在财务管理中的运用概括 二、促进财务决策科学化 1. 传统财务决策的局限性 2. 业财融合助力财务决策科学化 三、加强成本控制 1. 传统成本控制的不足 2. 业财融合实现精准成本管控 四、优化资金管理 1. 传统资金管理的问题 2. 业财融合优化资金配置…...
C#核心知识
委托 如何声明一个委托:通过 【delegate 返回值类型 委托名称】 的格式来定义 如何使用一个委托:使用new关键字,并传入和声明委托的构造相同的方法名,比如:new 委托名称(与委托的参数和返回值相同的一个方法名) 如何…...
[多彩数据结构] 笛卡尔树
[多彩数据结构] 笛卡尔树 定义 笛卡尔树,就是一棵树(废话)中存两个信息,为 ( w , i ) (w,i) (w,i)。其中 k w e i g h t , i i d kweight,iid kweight,iid。 即 w w w 存的是节点的值, i i i 存的是编号。 每…...
【Spark入门】Spark RDD基础:转换与动作操作深度解析
目录 1 RDD编程模型概述 1.1 RDD操作分类 2 常用转换操作详解 2.1 基本转换操作 2.2 键值对转换操作 2.3 复杂转换操作 3 动作操作触发机制 3.1 常见动作操作 3.2 动作操作性能对比 4 RDD执行机制深度解析 4.1 惰性求值原理 4.2 任务生成过程 5 性能优化实践 5.1 …...
一文了解 模型上下文协议(MCP)
MCP(Model Context Protocol,模型上下文协议)是由Anthropic公司于2024年11月推出的一项开放标准协议,旨在解决大型语言模型(LLM)与外部数据源和工具之间的通信问题。其核心目标是通过提供一个标准化的接口&…...
每日算法-250428
每日算法 - 2024年4月28日 记录今天完成的几道 LeetCode 算法题。 1877. 数组中最大数对和的最小值 题目描述: 思路 贪心策略。 解题过程 为了最小化所有数对和中的最大值,直观的想法是避免让两个较大的数相加。因此,最优策略是将数组中最小的元素…...
【“星瑞” O6 评测】 — CPU llama.cpp不同优化速度对比
前言 随着大模型应用场景的不断拓展,arm cpu 凭借其独特优势在大模型推理领域的重要性日益凸显。它在性能、功耗、架构适配等多方面发挥关键作用,推动大模型在不同场景落地 1. Kleidi AI 简介 Arm Kleidi 成为解决这些挑战的理想方案,它能…...
Redis 常见问题深度剖析与全方位解决方案指南
Redis 是一款广泛使用的开源内存数据库,在实际应用中常会遇到以下一些常见问题: 1.内存占用问题 问题描述:随着数据量的不断增加,Redis 占用的内存可能会超出预期,导致服务器内存不足,影响系统的稳定性和…...
在g2o图优化框架中,顶点(Vertex)和边(Edge)的定义与功能的区别
在g2o图优化框架中,顶点(Vertex)和边(Edge)是构建优化问题的核心组件,两者的定义与功能存在以下关键区别: 1. 作用与本质差异 顶点(Vertex) 代表待优化的变量,例如: 位姿(如VertexSE3Expmap表示3D位姿,包含平移和旋转)空间点坐标(如VertexPointXYZ表示3D点)参数…...
stm32wb55rg (2) 阅读资料手册
阅读资料是嵌入式开发的必备技能,能够从资料中找到自己想要的技术信息,才是最为核心的技术能力。 nucleowb55rg板子的MCU为stm32wb55rg,这块板子的资料有很多,但有些内容可以边用边读,有些内容有必要预先掌握下。 下面…...
基于Python的携程国际机票价格抓取与分析
一、项目背景与目标 携程作为中国领先的在线旅行服务平台,提供了丰富的机票预订服务。其国际机票价格受多种因素影响,包括季节、节假日、航班时刻等。通过抓取携程国际机票价格数据,我们可以进行价格趋势分析、性价比评估以及旅行规划建议等…...
【LLM开发】Unigram算法
Unigram算法 参考:Unigram算法解释 参考书籍:How Can We Make Language Models Better at Handling the Diversity and Variability of Natural Languages Unigram 算法是一种基于概率的子词分词方法,与BPE算法、WordPiece算法不同ÿ…...
GD32F407单片机开发入门(十六)单片机IAP(在应用编程)详解及实战源码
文章目录 一.概要二.GD32F407VET6单片机IAP介绍1.GD32F407VET6单片机IAP基本原理2.GD32F407VET6单片机IAP基本流程3.Ymodem协议 三.配置一个BOOT工程四.配置一个APP工程五.工程源代码下载六.小结 一.概要 单片机上电或系统复位后,ARM Cortex-M4处理器先从0x0000 00…...
庙算兵棋推演AI开发初探(7-神经网络训练与评估概述)
前面我们提取了特征做了数据集、设计并实现了处理数据集的神经网络,接下来我们需要训练神经网络了,就是把数据对接好灌进去,训练后查看预测的和实际的结果是否一致——也就是训练与评估。 数据解析提取 数据编码为数据集 设计神经网络 -->…...
[实战] IRIG-B协议详解及Verilog实现(完整代码)
目录 IRIG-B(B码)协议详解及Verilog实现一、IRIG-B协议概述二、帧格式详细解析1. 码元类型与索引计数2. 时间编码字段3. 控制功能码元(CF)4. 纯二进制秒码(SBS) 三、编码与信号特性四、时间编码实现1. 时间参数转换2. 帧数据填充规…...
从传统制造到智能工厂:MES如何重塑电子制造业?
在“中国制造2025”战略的引领下,电子制造业正经历深刻变革。多品种小批量、工艺复杂度高、质量追溯严苛等需求日益凸显。由此,如何通过数字化手段实现生产透明化、质量可追溯和资源高效协同,成为行业转型的关键命题。 一、电子制造业转型痛…...
使用Curl进行本地MinIO的操作
前言 最近在做相关的项目中关于本地服务搭建和访问的技术验证,打进来最基本的数据访问,使用了C。可以进行:服务器的可用性检查、Bucket的创建、文件夹的创建、文件的上传、文件的下载、文件夹和Bucket的存在性检查等基本接口,对自…...
uniswap getTickAtSqrtPrice 方法解析
先上代码: function getTickAtSqrtPrice(uint160 sqrtPriceX96) internal pure returns (int24 tick) {unchecked {// Equivalent: if (sqrtPriceX96 < MIN_SQRT_PRICE || sqrtPriceX96 > MAX_SQRT_PRICE) revert InvalidSqrtPrice();// second inequality mu…...
qemu(3) -- qemu-user使用
1. 前言 qemu中有很多的特技,此处记录下qemu-arm的使用方式,简单来说qemu-system-xx用于虚拟整个设备,包括操作系统的运行环境,而qemu-xx仅虚拟Linux应用程序的环境,不涉及操作系统,应用程序的系统调用有宿…...
CMCC RAX3000M使用Tftpd刷写OpenWrt固件的救砖方法
有时候,我们在玩运行 OpenWrt 的 CMCC RAX3000M ,因为一些操作不当,导致无法进入路由器系统,无法正常刷机。此时,如果我们已经刷写了uboot,则可以在uboot模式下通过Tftpd刷写新的OpenWrt固件,实…...
Vue基础(7)_计算属性
计算属性(computed) 一、使用方式: 1.定义计算属性: 在Vue组件中,通过在 computed 对象中定义计算属性名称及对应的计算函数来创建计算属性。计算函数会返回计算属性的值。 2.在模板中使用计算属性: 在Vue的模板中,您…...
1.9多元函数积分学
引言 多元函数积分学是考研数学一的核心内容,涵盖三重积分、曲线积分、曲面积分及空间曲线积分。本文系统梳理4大考点,结合公式速查与典型示例,助你高效攻克积分难题! 考点一:三重积分计算与应用 1️⃣ 对称性 (1) …...
【LINUX操作系统】线程操作
了解了线程的基本原理之后,我们来学习线程在C语言官方库中的写法与用法。 1. 常见pthread接口及其背后逻辑 1.1 pthread_create 与线程有关的函数构成了⼀个完整的系列,绝⼤多数函数的名字都是以“pthread_”打头的 • 要使⽤这些函数库,…...
web技术与nginx网站环境部署
一:web基础 1.域名和DNS 1.1域名的概念 网络是基于TCP/IP协议进行通信和连接的,每一台主机都有一个唯一的标识(固定的IP地址),用以区别在网络上成千上万个用户和计算机。网络在区分所有与之相连的网络和主机时,均采用一种唯一、通用的地址…...
多元复合函数求导的三种情况
1. 一元函数与多元函数复合 1.1 变量关系 1.2 求导公式 因为根据链式法则,先对z求导,z是二元函数,所以说是偏导;再对里面求导,u、v是一元函数,所以说是全导。 2. 多元函数与多元函数复合 2.1 变量关系…...
全面解析DeepSeek算法细节(2) —— 多令牌预测(Multi Token Prediction)
概述 多令牌预测(MTP)技术使DeepSeek-R1能够并行预测多个令牌,显著提升推理速度。 关键特性 并行多令牌预测:DeepSeek-R1通过同时预测多个令牌而非按顺序预测,提升了推理速度。这减少了解码延迟,在不影响…...
如何从大规模点集中筛选出距离不小于指定值的点
一、背景:当点集处理遇见效率挑战 在数字化浪潮席卷各行各业的今天,点集数据处理已成为地理信息系统(GIS)、计算机视觉、粒子物理仿真等领域的核心需求。以自动驾驶场景为例,激光雷达每秒可产生超过10万个点云数据&am…...
单片机-89C51部分:6、数码管
飞书文档https://x509p6c8to.feishu.cn/wiki/WRNLwDd0iiG8OWkyatOcom6knHf 一、数码管简介 通俗解释: 一个数码管等于八个LED组合在一起,想要显示什么形状,就点亮对应LED即可。 一般数码管分为共阴极数码管和共阳极数码管。 共阳极接法&…...
可解释人工智能(XAI):让机器决策透明化
在人工智能(AI)技术飞速发展的今天,AI 系统已经广泛应用于金融、医疗、交通等多个关键领域。然而,随着 AI 系统的复杂性不断增加,尤其是深度学习模型的广泛应用,AI 的“黑箱”问题逐渐凸显。AI 系统的决策过…...
深入理解网络原理:TCP协议详解
在现代计算机网络中,传输控制协议(TCP,Transmission Control Protocol)是最常用的传输层协议之一。TCP被广泛应用于互联网中的许多关键应用,如网页浏览、电子邮件和文件传输等。作为一种面向连接的协议,TCP…...
二极管钳位电路——Multisim电路仿真
目录 二极管钳位电路 2.1 二极管正向钳位电路 二极管压降测试 2.1.1 二极管正向钳位电路图 2.1.2 二极管正向钳位工作原理 2.2 二极管负向钳位电路 2.2.1 二极管负向钳位电路图 2.2.2 二极管负向钳位工作原理 二极管正向反向钳位仿真电路实验结果 2.3 二极管顶部钳位…...
【更新】LLM Interview (2)
字数溢出,不解释 前文:llm interview (1) 文章目录 强化学习专题1 什么是RL?2 RL和监督、非监督、深度学习的区别3 RL中所谓的损失函数与深度学习中的损失函数有何区别?4 RL历史5 RL分类5.1 分类图示5.2 根据智能体动作选取方式分…...
第二节:文件系统
理论知识 文件系统的基本概念:文件系统是操作系统中负责管理持久数据的子系统,它将数据组织成文件和目录的形式,方便用户存储和访问数据。Linux文件系统的类型:常见的 Linux 文件系统类型有 Ext2、Ext3、Ext4、XFS、Btrfs 等。Ex…...
astrbot_plugin_composting_bucket开源程序是一个用于降低AstrBot的deepseek api调用费用的插件
一、软件介绍 文末提供程序和源码下载 astrbot_plugin_composting_bucket开源程序是一个用于降低AstrBot的deepseek api调用费用的插件,让deepseek api调用费用更低! 本插件功能已集成到 AstrBot ,您可以移除此插件,在 AstrBot…...
8.Three.js中的 StereoCamera 立体相机详解+示例代码
✨ 运行效果 👀 左边一幅图、右边一幅图,略微偏移,形成立体感~ (戴上VR眼镜或红蓝3D眼镜体验更明显哦~) 🔥 小球或方块旋转中,左右略微不同步,立体感更强&am…...
MYSQL——时间字段映射Java类型
在 Java 中查询数据库中的【时间字段】时,可以使用以下几种类型来处理: 1. java.sql.Date 适用场景:当数据库中的时间字段是 date 类型时,使用 java.sql.Date 是最合适的选择。示例代码:ResultSet rs statement.exe…...