一文搞懂Java面试中的锁升级

锁升级分为四个阶段:无锁、偏向锁、轻量级锁和重量级锁。当Java对象刚创建且未进入同步代码块时,即处于无锁状态。若线程首次访问同步方法块,且在对象头中记录当前线程id,即形成偏向锁。若线程访问同步方法块时,发现偏向锁存在但非自身id,该线程等待所有线程进入安全点。判断原线程是否在执行同步方法。
一文搞懂Java面试中的锁升级
Java面试中的锁升级是一个重要考点,本文将通过synchronized关键字,阐述锁升级的过程,并介绍JDK15后偏向锁被废弃的情况。

synchronized在编程、技术文档及面试中广泛应用,其基本使用方法如下。

锁升级分为四个阶段:无锁、偏向锁、轻量级锁和重量级锁。

当Java对象刚创建且未进入同步代码块时,即处于无锁状态。

若线程首次访问同步方法块,且在对象头中记录当前线程id,即形成偏向锁。

若线程访问同步方法块时,发现偏向锁存在但非自身id,该线程等待所有线程进入安全点。判断原线程是否在执行同步方法。若否,则清除偏向锁,使用CAS操作实现加锁。

轻量级锁在代码进入同步块前,为当前线程栈帧创建Lock record空间,复制对象头中的Mark word信息。通过CAS操作尝试替换对象头信息为Lock Record指针。替换成功,则获取轻量级锁。

解锁过程则将对象头中的Lock Record指针替换回Mark Word信息。

重量级锁在多个线程竞争轻量级锁失败后,线程进入自旋状态。若超过自旋上限未获取锁,则将对象头锁标志位设为重量级锁。

偏向锁与无锁状态不同,一旦升级,无法降级。

自旋通常在多线程竞争较轻时使用,以减少线程切换成本。

JDK15开始,偏向锁被废弃,默认不启用。仅通过JVM命令-XX:+UseBiasedLocking开启,未来版本将移除。

偏向锁被废弃的主要原因在官方文档JEP 374: Deprecate and Disable Biased Locking中有详细说明。2024-11-13
mengvlog 阅读 7 次 更新于 2025-07-19 23:32:09 我来答关注问题0
  •  翡希信息咨询 从入门到精通!一文搞懂JavaAgent,提升你的Java应用

    创建JavaAgent:创建包含Manifest文件的jar包,指定PremainClass和AgentClass,实现JavaAgent的基本功能。启动JavaAgent:在启动Java应用时,使用javaagent选项指定JavaAgent jar包,将其集成至应用启动流程。代码优化与调试:充分利用JavaAgent提供的功能,优化代码性能,实现动态调试,从而提升开发效率与应用质量。...

  •  文暄生活科普 一文搞懂单向散列加密:MD5、SHA-1、SHA-2、SHA-3

    MD5和SHA-1算法已被证明存在安全漏洞,不再推荐用于新场景。相比之下,SHA-2和SHA-3算法仍被认为是安全的。SHA-2包含多个算法,包括SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224和SHA-512/256。SHA-3算法则包含SHA3-224、SHA3-256、SHA3-384和SHA3-512。在实际应用中,单向散列加密发挥...

  •  文暄生活科普 一文搞懂reduce的用法和使用场景!

    语法方面,reduce 方法接收两个参数:回调函数和初始值。回调函数用于处理数组元素,初始值则用于第一次执行回调函数时作为参数传递。在使用 reduce 时,有几个关键点需要注意:初始值对回调函数的执行结果有很大影响,返回值是遍历所有数组执行回调函数后的结果。当有初始值时,回调函数第一次执行时的 prev...

  •  翡希信息咨询 一文搞懂Kotlin符号处理接口KSP

    添加插件:在项目build.gradle文件中添加Kotlin插件,并在依赖库中指定KSP。处理器实现:自定义处理器需放在单独的库模块中,并指定为Java或Kotlin库。处理器实现涉及两个接口:SymbolProcessorProvider和SymbolProcessor。注册处理器:在processor module的资源文件中注册处理器。KSP的优势:性能更优:由于KSP更...

  •  翡希信息咨询 【Java常用框架精讲4】一文搞懂logback系统日志工具(附实战代码详解)

    logback简介:logback是Java项目中常用的系统日志工具之一,与log4j有关联,但logback提供了更为灵活和强大的日志管理功能。准备工作:依赖配置:在项目的pom.xml文件中添加logback的依赖,以便在项目中使用logback进行日志记录。MyBatis配置:参考相关文章进行MyBatis的配置,确保日志系统能够正确集成到项目中。自...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部