synchronized 完整复盘,特性 + 用法 + 锁升级全拆解
目录1. synchronized 核心特性1.1 JMM 三大保障原子性、可见性、有序性1.2 可重入性锁1.3 自动释放锁1.4 非公平锁、不可中断2. synchronized 四种使用方式2.1 修饰普通成员方法2.2 修饰同步代码块2.3 修饰 static 静态方法2.4 代码块锁定 Class 对象3. synchronized 底层锁完整机制3.1 锁单向升级流程偏向锁→轻量级锁→重量级锁4. wait/notify 配套使用规范前言synchronized作为 Java 原生关键字是解决多线程并发安全的核心工具。为了系统化吃透该知识点本篇按照特性、使用、底层锁机制三大模块完整复盘。1. synchronized 核心特性1.1 JMM 三大保障原子性、可见性、有序性原子性:字面意思上可以理解为,不可拆分的整体,被synchronized包裹的代码为原子的,同一时间只会被一条线程执行,不会出现多条线程穿插执行;可见性:由CPU引起的内存可见性问题,多线程缓存不一致或者说JMM引起的内存可见性问题;有序性:依靠内存屏障禁止同步代码内部、同步代码与外部代码发生指令重排序保证代码执行顺序和书写顺序一致。 返回目录1.2 可重入性锁synchronized属于可重入锁;可重入锁:简单理解可以理解为~可以被重复上锁的锁;同一个线程可多次获取同一把锁不会出现线程自己阻塞自己的死锁JVM 自动记录锁持有次数每次退出同步块次数减至 0 才真正释放锁。按照正常逻辑来说:第二次进行上锁时,因为前面已经上锁过了,此时应该会进行阻塞等待,而此时就会一直进行阻塞等待,就构成了死锁但是此时并没有构成死锁,原因就是实现synchronized底层逻辑是可以重复进行上锁的;staticObjectlocknewObject();publicstaticvoidfunc(){synchronized(lock){System.out.println(外层代码);synchronized(lock){System.out.println(内层代码);}}}publicstaticvoidmain(String[]args){func();}并没有构成死锁: 返回目录1.3 自动释放锁自动释放锁:字面意思就是会自己释放锁的锁,释放锁时机:synchronized对应花括号相较于ReentrantLock这把锁来说,synchronized不需要手动unlock来释放锁,二者都有相应的好处与劣势; 返回目录1.4 非公平锁、不可中断synchronized是一把非公平锁,而ReentrantLock既可以是公平锁也可以是非公平锁;公平锁:我们可以认为是讲究先来后到的原则;非公平锁:可以理解为各凭本事抢synchronized的不可中断:线程因争抢 synchronized 锁阻塞时无法被interrupt()中断只能等待拿到锁或拿到锁后才能响应中断标记。 返回目录2. synchronized 四种使用方式2.1 修饰普通成员方法锁住调用该方法的对象,多个线程访问不同对象,不会互斥;当不同线程只访问同一个对象时才会执行串行;publicsynchronizedvoidtest(){// 临界区代码} 返回目录2.2 修饰同步代码块手动创建一个任意类型的对象作为锁,可以指定上锁的范围,不需要锁整一个范围;ObjectlocknewObject();publicvoidrun(){synchronized(lock){// 仅此处代码加锁}} 返回目录2.3 修饰 static 静态方法静态方法属于非实例方法,上锁方式为:类名.class,所有类对象公用同一把锁,无论哪一个实例调用,都只会执行串行化;publicstaticsynchronizedvoidTest(){// 临界区} 返回目录2.4 代码块锁定 Class 对象和静态方法锁效果完全一致全局所有实例共享同一把类锁。synchronized(Test.class){// 全局互斥}实例锁this / 普通代码块对象隔离不同对象互不阻塞,共用不同对象的锁;类锁static/class全局隔离所有对象互斥,也就是公用同一把锁; 返回目录3 synchronized 底层锁完整机制Java 中所有对象在堆中包含对象头其中Mark Word存储锁标记、线程 ID、锁重入次数、GC 分代年龄等信息。synchronized 的本质是修改 Mark Word 的标记位实现锁Monitor 监视器依附于对象头。 返回目录3.1 锁单向升级流程偏向锁→轻量级锁→重量级锁注意:锁只能升级、不能降级偏向锁:简单来理解就是假上锁,编译器的优化机制,上锁解锁也会频繁消耗系统资源,此时编译器优化就不会让锁真正加上;我们也可以用日常生活中的例子来说明:例如:小美是一个女海王,正在和其中一个舔狗搞暧昧,但是迟迟不确定关系,此时有另一个妹子小猪来接近那一个舔狗,此时女海王就急眼了,我可以不要但是你不能抢,女海王就提前和舔狗表白在一起,此时在搞暧昧期间就是偏向锁,急眼了在一起之后就自动升级为自旋锁轻量级-重量级锁转化条件:其一:并发线程数多多个线程同时抢锁自旋大量失败其二:线程自旋循环次数达到 JVM 最大值空耗 CPU。此时轻量级升级为重量级锁争抢失败的线程进入内核阻塞队列阻塞等待并让出 CPU。 返回目录4. wait/notify 配套使用规范注意:必须写在 synchronized 同步代码块 / 同步方法内,wait()、notify()、notifyAll() 只能由锁对象调用。调用wait方法时,会释放当前持有的锁,没有锁则会抛出IllegalMonitorStateException异常(非法监视器异常)使用要求锁对象是谁就用谁来调用 wait/notify。例synchronized(lock) 必须写lock.wait()不能用 this 随意调用。等待和唤醒必须使用同一个锁对象例如:A 线程用 lock.wait () 休眠B 线程必须用 lock.notify () 唤醒锁不一致无法唤醒逻辑就会失效。尽量使用while来判断为什么要使用while来判断而不是if?~如果在判断队列是否为null的情况下,只使用if来进行判断是否为null的情况下,如果下一次还是null呢?如果此时进行peek或者poll操作都会抛出异常,此时就会出现虚假唤醒的情况 返回目录

相关新闻

Python自学路线图:从核心语法到实战项目,避开教程陷阱

Python自学路线图:从核心语法到实战项目,避开教程陷阱

如果你在B站、抖音或者各种学习平台,看到过类似“冒死上传!花7980买的Python全套教学视频,七天从小白到大神!”这样的标题,大概率会心头一热,然后点击收藏。但收藏夹吃灰几个月后,你可能会发现&…

2026/8/3 8:39:45阅读更多 →
论文答辩五大评审焦点解析与优化策略

论文答辩五大评审焦点解析与优化策略

1. 论文答辩的视觉焦点解析答辩现场最紧张的时刻,莫过于看着评阅老师快速翻阅你的论文。那些停顿、皱眉或点头的微表情,往往预示着分数走向。作为经历过数十场答辩评审的老手,我发现老师们目光停留的位置出奇地一致——他们像经验丰富的猎手&…

2026/8/3 8:39:45阅读更多 →
.NET开发从入门到精通:系统学习路径与实战指南

.NET开发从入门到精通:系统学习路径与实战指南

1. 专栏定位与学习路径设计这个专栏的核心目标是帮助零基础开发者系统掌握.NET技术栈。不同于市面上大多数教程的碎片化特点,我们采用"洋葱式"学习模型——从最基础的C#语法开始,像剥洋葱一样层层深入,最终抵达.NET生态的核心。我建…

2026/8/3 8:39:45阅读更多 →
UE5子关卡拆分:解决美术程序协作冲突,优化场景资产管理

UE5子关卡拆分:解决美术程序协作冲突,优化场景资产管理

1. 项目概述:为什么UE5协作开发总在“打架”?在UE5项目里,美术和程序“打架”几乎是每个团队都会经历的阵痛。美术抱怨程序锁定了场景文件,自己改个灯光都得排队等半天;程序则头疼美术一股脑把所有资源都塞进一个主关卡…

2026/8/3 9:51:00阅读更多 →
140、YOLOv8改进实战:Label Smoothing标签平滑在分类分支中的实现与过拟合抑制

140、YOLOv8改进实战:Label Smoothing标签平滑在分类分支中的实现与过拟合抑制

140、YOLOv8改进实战:Label Smoothing标签平滑在分类分支中的实现与过拟合抑制 上个月调一个细粒度分类检测项目,模型在训练集上分类准确率冲到98%,验证集死活卡在82%不动。看loss曲线,分类分支的loss降得飞快,但val的top-1 accuracy纹丝不动。这种场景太熟悉了——模型对…

2026/8/3 9:51:00阅读更多 →
信捷PLC与台达脉冲伺服接线调试实战指南

信捷PLC与台达脉冲伺服接线调试实战指南

1. 项目缘起:一次典型的脉冲伺服接线实战 最近在调试一套小型自动化设备,核心动作单元是一个由信捷PLC控制的台达脉冲型伺服电机。项目不复杂,就是几个点位间的往复运动,但真到了现场接线那一步,才发现“知道”和“会做…

2026/8/3 9:51:00阅读更多 →
关于图论【卡码网109.冗余连接II的思考】

关于图论【卡码网109.冗余连接II的思考】

一、本题题目二、本题代码// 分为三部分// 第一部分:main函数// 第二部分:并查集的相关操作// 第三部分:判断删除了这条边是否是树(封装函数)三、关键思路先处理前两种情况,再单独处理第三种情况// 借用代码…

2026/8/3 9:51:00阅读更多 →
AI文件导入AE全攻略:从原理到插件,解决MG动画设计痛点

AI文件导入AE全攻略:从原理到插件,解决MG动画设计痛点

1. 项目概述:为什么AI文件导入AE是个“技术活”? 如果你经常在Adobe Illustrator(AI)和After Effects(AE)之间切换工作,大概率遇到过这样的场景:在AI里精心绘制了一套酷炫的矢量图标…

2026/8/3 9:51:00阅读更多 →
综合能源系统智能调度:CSP、ORC与P2G的Matlab优化实践

综合能源系统智能调度:CSP、ORC与P2G的Matlab优化实践

1. 项目概述:综合能源系统的智能调度方案这个项目解决的是现代能源系统中一个关键痛点——如何高效协调多种异质能源的调度问题。我们构建了一个包含光热电站(CSP)、有机朗肯循环(ORC)和电转气(P2G)技术的综合能源系统,通过Matlab实现优化调度算法。这种…

2026/8/3 9:49:00阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/3 0:29:53阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/3 0:33:53阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/3 0:20:37阅读更多 →
3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。…

2026/8/3 0:00:32阅读更多 →
[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

PC服务器具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构一、前言:具身智能需要“混合算力闭环系统”传统人工智能依赖云端静态数据集训练,不具备物理交互能力,无法适应真实世界的不确定性。具身智能(Embodied…

2026/8/3 0:00:32阅读更多 →
[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

前言构建机器人、具身智能这类分布式实时系统,通信底座直接决定整套系统的实时性、容错性、组网能力。分布式领域长期存在 4 类经典通信架构:点对点模式、Broker 中间代理模式、广播模式、以数据为中心(DDS)模式。很多开发者疑惑&…

2026/8/3 0:00:32阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/3 2:32:59阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/3 2:33:01阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/3 2:33:04阅读更多 →