一文搞懂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 阅读 104 次 更新于 2025-09-10 16:32:48 我来答关注问题0
  • Java面试中的锁升级是一个重要考点,本文将通过synchronized关键字,阐述锁升级的过程,并介绍JDK15后偏向锁被废弃的情况。synchronized在编程、技术文档及面试中广泛应用,其基本使用方法如下。锁升级分为四个阶段:无锁、偏向锁、轻量级锁和重量级锁。当Java对象刚创建且未进入同步代码块时,即处于无锁状态。

  •  阿暄生活 权限系统:一文搞懂功能权限、数据权限

    权限系统:一文搞懂功能权限、数据权限在权限系统中,权限通常分为两大类:功能权限和数据权限。这两种权限相辅相成,共同决定了用户在系统中可以执行哪些操作、访问哪些信息。功能权限1、功能权限是什么 当登录某个系统时,有些功能按钮是灰色的,甚至有些页面完全不可见,这正是功能权限在发挥作用。功能...

  •  翡希信息咨询 OpenJDK傻傻分不清楚?一文全部搞懂!(建议收藏)

    OpenJDK(Open Java Development Kit)是Java Development Kit(JDK)的开源实现,也是Java Platform Standard Edition(Java SE)的官方参考实现。它实现了JDK的所有功能,并提供了一个用于构建和开发Java应用程序的工具集,包括编译器、Java类库和虚拟机等。简而言之,JDK是开发工具包,而OpenJDK是这个工具...

  •  文暄生活科普 什么是SSL?TLS?SSL/TLS?HTTPS?一篇文搞懂

    SSL与TLS:TLS是SSL的升级版,二者功能相似,但TLS更新、更安全且持续更新。在实际应用中,“SSL”一词常被泛用于指代SSL/TLS整体。HTTPS与SSL/TLS:HTTPS依赖SSL/TLS实现加密和身份验证,是“HTTP的安全增强版”。他们之间的关系可以用一个公式来概括:HTTPS=HTTP+SSL/TLS。总结来说,SSL是早期的网络...

  •  翡希信息咨询 一文搞懂测试左移和测试右移的 Why-How-What

    一文搞懂测试左移和测试右移的 Why-How-WhatWhy(为什么需要测试左移和测试右移)在传统的软件测试流程中,测试人员往往是在开发完成后才开始进行测试,这种模式存在明显的弊端:测试过程滞后,导致发现问题的时间较晚,修复成本增加,且容易因为质量不达标而延期上线。随着移动互联网和DT时代的到来,产品...

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

Java相关话题

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