当前位置: 首页 > news >正文

如何理解synchronized锁升级

在Java中,synchronized 关键字是实现线程同步的一种方式,它涉及到锁的升级和释放的过程。理解synchronized 锁的升级可以分为三个阶段:无锁状态、偏向锁状态和轻量级锁状态。

  1. 无锁状态

    • 当对象被创建时,默认处于无锁状态。
    • 多个线程可以同时访问对象的方法,不会进行同步操作,因此不存在锁竞争。
  2. 偏向锁状态

    • 当某个线程第一次访问一个synchronized 方法或代码块时,Java 虚拟机会在对象头中的标记字段中记录当前线程的标识符。
    • 如果以后没有其他线程来竞争锁,则该线程可以在进入和退出同步块时,不需要进行CAS操作来加锁和解锁,从而节省了操作时间。
  3. 轻量级锁状态

    • 当存在多个线程访问同步块时,偏向锁会升级为轻量级锁。
    • Java 虚拟机通过CAS操作尝试获取锁,如果成功则将对象头中的标记字段改为指向锁记录的指针,此时其他线程访问同步块时会进行自旋等待。
    • 如果自旋等待成功,线程就可以进入同步块,如果自旋等待失败,表示存在竞争,轻量级锁会膨胀为重量级锁。
  4. 重量级锁状态

    • 如果自旋等待不成功,轻量级锁就会膨胀为重量级锁。
    • 这时候锁的状态会被升级为重量级锁,重量级锁是通过操作系统的互斥量实现的,会导致线程进入阻塞状态,性能较差。

synchronized 锁在运行时会根据竞争的情况逐步升级锁的状态,从无锁到偏向锁再到轻量级锁,最后才是重量级锁。这种锁升级的过程是为了在保证数据安全的前提下,尽量减少锁带来的性能开销。

http://www.lryc.cn/news/391126.html

相关文章:

  • js【最佳实践】遍历数组的八种方法(含数组遍历 API 的对比)for,forEach,for of,map,filter,reduce,every,some
  • Node.js开发实战 视频教程 下载
  • VS2022(Visual Studio 2022)最新安装教程
  • 从华为和特斯拉之争,看智能驾驶的未来
  • 20240705 每日AI必读资讯
  • C++ 设计模式之访问者模式
  • linux——IPC 进程间通信
  • JAVA数字化产科管理平台源码:涵盖了孕妇从建档、产检、保健、随访、分娩到产后42天全流程的信息化管理
  • http数据传输确保完整性和保密性整流程方案(含源码)
  • UE插件与云渲染:10个提升效率的选择
  • [Shell编程学习路线]——shell脚本中case语句多分支选择详解
  • Django REST Framework(四)DRF Serializer
  • 【C语言】bool 关键字
  • 开发电商ERP系统需要接入哪些平台API?
  • Meet AI4S 直播预告丨房价分析新思路:神经网络直击复杂地理环境中的空间异质性
  • 支持向量机(SVM)在机器学习中的简单示例
  • 使用Anaconda虚拟环境安装Opencv、pytorch、torchvision踩坑记录
  • 【人工智能】CPU、GPU与TPU:人工智能领域的核心处理器概述
  • 【康复学习--LeetCode每日一题】3099. 哈沙德数
  • docker使用jdk21启动jar包报错
  • Object 类中的公共方法详解
  • python 字典 一个key 多 value 遍历
  • vue---基本原理(二)
  • 桂花网蓝牙网关X1000:引领物联网新时代的智能连接
  • JAVA案例模拟电影信息系统
  • 基于Hadoop平台的电信客服数据的处理与分析③项目开发:搭建基于Hadoop的全分布式集群---任务10:Hive安装部署
  • 第一百四十二节 Java数据类型教程 - Java字符数据类型
  • AI 绘画的常用技巧和操作方法
  • Kafka入门到精通(四)-SpringBoot+Kafka
  • 起飞,纯本地实时语音转文字!