Java核心技术:synchronized的底层实现与锁升级
需积分: 0 160 浏览量
更新于2024-08-05
收藏 741KB PDF 举报
"Java核心技术36讲第16讲深入解析synchronized的底层实现机制,包括锁的升级和降级策略。"
在Java编程中,synchronized关键字是用于实现线程同步的重要工具,确保在多线程环境下对共享资源的访问是安全的。在Java 6及后续版本中,JVM针对synchronized进行了优化,引入了多种锁实现,包括偏斜锁、轻量级锁和重量级锁,以适应不同竞争状况下的性能需求。
偏斜锁是一种优化策略,假设大部分对象会被一个线程长期持有。在没有竞争时,JVM会在对象头的Mark Word字段中存储线程ID,表示该对象被当前线程所偏斜持有,避免了锁的建立和销毁的开销。如果另一个线程尝试获取已被偏斜的锁,那么偏斜锁就会被撤销,转而升级为轻量级锁。
轻量级锁是介于偏斜锁和重量级锁之间的一种状态,同样使用CAS操作。当线程尝试获取已被其他线程持有的轻量级锁时,如果锁状态为空,会尝试使用CAS操作替换Mark Word,将锁标记为已锁定并关联当前线程。如果CAS失败,说明有其他线程也在尝试获取这把锁,此时轻量级锁膨胀为重量级锁。
重量级锁依赖于操作系统提供的互斥锁,即临界区,涉及到线程上下文的切换,性能相对较低。当锁竞争激烈,轻量级锁升级为重量级锁时,会将Mark Word替换为指向 Monitor 对象的指针,使得其他线程等待在 Monitor 对象的队列中,直到持有锁的线程释放锁。
锁的降级是指在某些特定情况下,比如持有重量级锁的线程执行完同步代码块后,可以将锁状态恢复为轻量级锁或偏斜锁,以便后续的无竞争情况继续享受优化带来的性能提升。但这并不是一个普遍的过程,而是根据JVM的优化策略和具体实现来决定的。
理解synchronized的底层实现对于优化并发程序至关重要,因为不同的锁状态转换会影响到程序的性能。在设计并发程序时,开发者需要根据实际的并发场景选择合适的同步机制,以达到最佳的性能和可伸缩性。通过掌握这些知识点,你可以更好地理解和调试那些涉及synchronized的复杂并发问题。
2022-08-03 上传
2024-06-19 上传
点击了解资源详情
2024-04-14 上传
2019-06-02 上传
2021-10-27 上传
2021-10-01 上传
点击了解资源详情
点击了解资源详情
独角兽邹教授
- 粉丝: 39
- 资源: 320
最新资源
- 血色素沉着病:混合了性别和基因型的血液样本具有铁血毒性
- 参考资料-基于soc单片机的ph值检测与控制.zip
- Copy Tab-crx插件
- pandas_flavor-0.1.2.tar.gz
- Tcldrop-开源
- zTail-开源
- 通往软件架构师的道路-Python开发
- Laboratorio7_CVDS
- 恶意软件收集:计算机的恶意软件,压力测试等的源代码
- whiteboard-angular-client:白板前端。 Whiteboard Web App的Angular客户端。 :books:
- pandas_flavor-0.1.1.tar.gz
- iTab - Awesome Tab Manager-crx插件
- aria2c-android-app:aria2c-android-app
- projecting
- x70talk-开源
- DPDraggableButton-Swift:拖动或点击按钮以触发手势事件