Java synchronized关键字详解:从入门到原理
Javasynchronized关键字详解从入门到原理2026最新视角synchronized 是 Java 中最基础、最重要的内置同步机制也是面试和实际开发中最常被问到的并发原语之一。一、synchronized 能解决什么问题最核心的三个性质性质含义synchronized 如何保证原子性操作要么全部完成要么都不发生进入同步块获得锁退出同步块释放锁可见性一个线程修改的结果对后续线程可见解锁前把工作内存 → 主内存happens-before有序性禁止指令重排序部分场景进入/退出同步块建立 happens-before 关系二、使用方式从简单到进阶同步方法最常用// 锁对象 this当前实例publicsynchronizedvoidincrement(){count;}// 静态同步方法锁对象 Class 对象字节码对象publicstaticsynchronizedvoidstaticMethod(){...}同步代码块推荐锁粒度更细// 推荐写法锁粒度小privatefinalObjectlocknewObject();publicvoidmethod(){// 业务前置代码...synchronized(lock){// 锁对象可以任意对象count;}// 业务后置代码...}常见错误用法对比// 错误示范1不同对象锁不住synchronized(newObject()){...}// 每次都是新对象没意义// 错误示范2String 常量池导致锁范围过大synchronized(lock){...}// 危险可能锁住其他使用相同字符串的地方三、底层实现原理重点synchronized 的实现经历了巨大的优化演进JDK 1.6 之前纯重量级锁monitorenter / monitorexit → OS MutexJDK 1.6 之后引入锁升级优化偏向 → 轻量级 → 重量级对象头 Mark Word 结构64位 HotSpot锁状态Mark Word (64 bit) 主要内容锁标志位偏向标志位是否可偏向无锁hashCode 分代年龄01--偏向锁线程ID epoch 分代年龄011是轻量级锁指向线程栈中 LockRecord 的指针00--重量级锁指向 Monitor 对象的指针10--GC标记特殊状态11--锁升级全流程非常重要无锁 → 偏向锁JDK 1.6 默认开启-XX:-UseBiasedLocking 关闭第一个线程访问时 → CAS 把线程 ID 写进 Mark Word后续同一个线程再次进入 → 只需比较线程 ID零成本偏向锁 → 轻量级锁有第二个线程竞争发生竞争 → 撤销偏向revoke bias需要安全点、全局 safepoint当前线程在栈帧创建Lock RecordDisplaced Mark WordCAS 把 Mark Word 替换成指向 Lock Record 的指针轻量级锁 → 重量级锁自旋也抢不到多个线程 CAS 失败 → 膨胀创建 Monitor 对象重量级锁没抢到的线程进入阻塞队列park/unpark由 OS 调度重量级锁代价最高用户态 ↔ 内核态切换锁升级方向无锁 → 偏向 → 轻量级 → 重量级不可逆JDK 最新动态2024–2026JDK 15 开始逐步废弃偏向锁-XX:-UseBiasedLocking 默认值在未来版本可能改变JDK 18 很多发行版已默认关闭偏向锁因为现代应用竞争场景多撤销偏向锁的成本反而更高四、synchronized 的内存语义happens-before线程A 线程B synchronized(obj) { // A 解锁 x 1; ←─ happens-before ──→ y 2; 看到 x1, y2 } synchronized(obj) { // B 加锁规则解锁 → 后续对同一个锁的加锁 建立 happens-before这保证了可见性和有序性禁止部分重排序五、synchronized vs ReentrantLock面试常问对比维度synchronizedReentrantLock是否可重入是是是否可中断不可一直阻塞可lockInterruptibly()是否可定时否是tryLock(timeout)是否公平锁非公平可公平 / 非公平是否支持条件变量不支持只有 wait/notify支持多个 Condition代码可读性更简洁更复杂需要 finally unlock性能现代 JDK差距很小偏向锁关闭后略好可精细控制使用推荐场景普通同步场景、代码简洁优先需要中断、超时、多个条件等待六、总结现代开发中 synchronized 的定位2026视角大多数普通业务优先使用 synchronized简单、安全、JVM 持续优化高并发、低延迟考虑 ReentrantLock / StampedLock / 读写锁 / 无锁并发容器极致性能CAS 自旋 VarHandle / Atomic*避开锁面试最爱问的点锁升级过程、Mark Word 变化、偏向锁撤销代价、内存语义一句话总结synchronized 是“简单粗暴但经过十几年深度优化的悲观锁”现代 JVM 已经让它在绝大多数场景下性能不再是瓶颈。有想深入某个部分的比如偏向锁撤销细节、字节码 monitorenter 实现、JOL 看对象头可以继续问

相关新闻

提示工程架构师晋升难?因为你没搞懂这套「成长地图」

提示工程架构师晋升难?因为你没搞懂这套「成长地图」

提示工程架构师晋升难?因为你没搞懂这套「成长地图」 一、引言:为什么你离「提示工程架构师」还差一步? 在2023年「生成式AI爆发」的浪潮中,提示工程(Prompt Engineering) 从「AI领域的小众技巧」变成了「所有企业数字化转型的核心能力」。从智能客服的多轮对话到代码助…

2026/7/4 23:24:15 阅读更多 →
惊叹!提示工程架构师让区块链与提示系统结合焕发新活力

惊叹!提示工程架构师让区块链与提示系统结合焕发新活力

《提示工程区块链:架构师如何用“会思考的合约”激活去中心化应用新活力?》 一、引言:区块链的“硬伤”与提示系统的“软助”,如何破局? 1. 痛点引入:当区块链遇到“动态需求”,智能合约也会“卡…

2026/7/5 10:37:52 阅读更多 →
探索新高度!AI应用架构师在AI模型持续优化中的突破

探索新高度!AI应用架构师在AI模型持续优化中的突破

探索新高度!AI应用架构师在AI模型持续优化中的突破 一、引言 钩子 你是否曾惊叹于AI技术创造出的那些神奇成果,如精准的图像识别、智能的语音交互、甚至能进行复杂文本创作的聊天机器人?然而,你是否也会疑惑,这些看似完…

2026/5/17 5:47:06 阅读更多 →

最新新闻

Recog指纹库详解:30+协议类型与匹配场景全解析

Recog指纹库详解:30+协议类型与匹配场景全解析

Recog指纹库详解:30协议类型与匹配场景全解析 【免费下载链接】recog Pattern recognition for hosts, services, and content 项目地址: https://gitcode.com/gh_mirrors/re/recog Recog是一个强大的指纹识别框架,专门用于通过模式匹配技术识别网…

2026/7/6 17:31:15 阅读更多 →
分析报告】量身定制:基于大数据的行业痛点与蓝海机遇挖掘

分析报告】量身定制:基于大数据的行业痛点与蓝海机遇挖掘

【分析报告】量身定制:基于大数据的行业痛点与蓝海机遇挖掘 深夜,你盯着电脑屏幕上密密麻麻的行业数据,从国家统计局到各大咨询公司的白皮书,资料下载了十几个G,PPT做了几十页,但老板那句“所以&#xff0…

2026/7/6 17:27:07 阅读更多 →
ReVanced Integrations 完全指南:掌握 YouTube 增强插件的核心组件库

ReVanced Integrations 完全指南:掌握 YouTube 增强插件的核心组件库

ReVanced Integrations 完全指南:掌握 YouTube 增强插件的核心组件库 【免费下载链接】revanced-integrations 🔩 ReVanced Integrations containing classes to be merged by ReVanced Patcher 项目地址: https://gitcode.com/gh_mirrors/re/revanced…

2026/7/6 17:27:07 阅读更多 →
Redis-Lua在Web开发中的应用:构建高性能Lua后端服务的实战案例

Redis-Lua在Web开发中的应用:构建高性能Lua后端服务的实战案例

Redis-Lua在Web开发中的应用:构建高性能Lua后端服务的实战案例 【免费下载链接】redis-lua A Lua client library for the redis key value storage system. 项目地址: https://gitcode.com/gh_mirrors/re/redis-lua Redis-Lua是一个纯Lua编写的Redis客户端库…

2026/7/6 17:24:58 阅读更多 →
如何快速集成SourceEditor到你的iOS应用:从安装到基础使用的完整指南

如何快速集成SourceEditor到你的iOS应用:从安装到基础使用的完整指南

如何快速集成SourceEditor到你的iOS应用:从安装到基础使用的完整指南 【免费下载链接】source-editor A native source editor for iOS and macOS, written in Swift 项目地址: https://gitcode.com/gh_mirrors/so/source-editor SourceEditor是一个专为iOS和…

2026/7/6 17:24:57 阅读更多 →
5个关键问题:为什么Python开发者需要Neomodel来高效操作Neo4j图数据库

5个关键问题:为什么Python开发者需要Neomodel来高效操作Neo4j图数据库

5个关键问题:为什么Python开发者需要Neomodel来高效操作Neo4j图数据库 【免费下载链接】neomodel An Object Graph Mapper (OGM) for the Neo4j graph database. 项目地址: https://gitcode.com/gh_mirrors/ne/neomodel Neomodel是Neo4j图数据库的官方推荐Py…

2026/7/6 17:22:56 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻