博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客👦🏻 优秀内容 《java 面试题大全》 《java 专栏》 《idea技术专区》 《spring boot 技术专区》 《MyBatis从入门到精通》 《23种设计模式》 《经典算法学习》 《spring 学习》 《MYSQL从入门到精通》数据库是开发者必会基础之一~ 🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭 🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!💻⌨
默语是谁?
大家好,我是 默语,别名默语博主,擅长的技术领域包括Java、运维和人工智能。我的技术背景扎实,涵盖了从后端开发到前端框架的各个方面,特别是在Java 性能优化、多线程编程、算法优化等领域有深厚造诣。
目前,我活跃在CSDN、掘金、阿里云和 51CTO等平台,全网拥有超过10万的粉丝,总阅读量超过1400 万。统一 IP 名称为 默语 或者 默语博主。我是 CSDN 博客专家、阿里云专家博主和掘金博客专家,曾获博客专家、优秀社区主理人等多项荣誉,并在 2023 年度博客之星评选中名列前 50。我还是 Java 高级工程师、自媒体博主,北京城市开发者社区的主理人,拥有丰富的项目开发经验和产品设计能力。希望通过我的分享,帮助大家更好地了解和使用各类技术产品,在不断的学习过程中,可以帮助到更多的人,结交更多的朋友.
我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。
你对 synchronized
锁机制 和其优化技术的总结非常详细,涵盖了锁的不同状态和实现细节。我将对你的内容稍作整理,以更清晰地展示各个核心点,并补充一些容易混淆的地方。
synchronized
锁的基本用法synchronized
是 Java 提供的一种内置锁机制,用于线程同步。其主要用法分为三种类型:
分类 | 具体分类 | 锁对象 | 格式 |
---|---|---|---|
方法 | 普通方法 | 实例对象 | public synchronized void method() |
静态方法 | 类对象 | public static synchronized void method() | |
代码块 | 实例对象代码块 | 实例对象 | synchronized(this){} |
Class对象 | 类对象 | synchronized(CLazz.class){} | |
任意Object实例 | 任意实例对象 | synchronized(lockObject){} |
synchronized
的执行机制monitorenter
和 monitorexit
指令实现。ACC_SYNCHRONIZED
修饰符标识同步。Java 在 JDK 6 之后通过 偏向锁、轻量级锁 和 重量级锁 提高了锁的性能。这些优化基于对象头中的 MarkWord
字段实现。
MarkWord
包括: 0
01
01
且偏向锁标志为 0
。MarkWord
。1
。MarkWord
中的线程 ID 确认,无需任何额外操作。MarkWord
到线程的锁记录(Lock Record)。MarkWord
指向线程的锁记录。00
。MarkWord
恢复原值。ObjectMonitor
实现,阻塞线程等待锁释放。10
。synchronized
与 Lock
的区别特性 | synchronized | Lock |
---|---|---|
实现 | JVM 层面实现 | Java 代码实现 |
异常处理 | 异常时自动释放锁 | 必须在 finally 块手动释放 |
响应中断 | 不支持 | 支持 |
锁状态获取 | 无法判断 | 可以判断是否成功获取锁 |
读写效率 | 不支持读写锁分离 | 支持,提高读操作效率 |
这些优化使得 synchronized
的性能大大提升,在大多数场景下可以替代 Lock
使用。而在需要精确控制锁行为时,可以使用 Lock
接口。
希望这份整理对你有帮助!😊