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

Synchronized解析

一、底层原理:Monitor机制

  1. 对象锁与Monitor关联
    synchronized通过对象锁实现互斥,每个Java对象都可以关联一个Monitor(监视器),其底层由JVM用C++实现。当线程进入synchronized代码块时,会尝试获取与锁对象关联的Monitor所有权。

  2. Monitor内部结构

    • Owner:记录当前持有锁的线程,同一时刻只能有一个线程成为Owner。
    • EntryList:存储未抢到锁的线程,处于Blocked状态。
    • WaitSet:存储调用wait()方法的线程,处于Waiting状态。
  3. 锁竞争流程

    • 线程首次尝试获取锁时,若Owner为空,则成为Owner并执行同步代码。
    • 若Owner已被占用,线程进入EntryList阻塞。当Owner释放锁后,EntryList中的线程以非公平方式竞争锁。
    • 若线程在同步代码中调用wait(),则会释放锁并进入WaitSet等待唤醒。

二、锁升级机制(JDK 1.6优化)

  1. 锁的三种形态

    • 偏向锁:通过Mark Word中的线程ID标记锁的偏向状态,适用于无竞争场景。
    • 轻量级锁:通过CAS操作替换Mark Word中的锁记录指针,适用于线程交替执行的低竞争场景。
    • 重量级锁:传统Monitor实现,涉及用户态与内核态切换,性能较低。
  2. 升级条件

    • 偏向锁升级:当其他线程尝试获取偏向锁时,JVM会撤销偏向锁并升级为轻量级锁。
    • 轻量级锁升级:若CAS操作失败(竞争激烈),则膨胀为重量级锁。

三、与Lock的区别

  1. 语法层面

    • synchronized是关键字,由JVM自动加锁/释放锁。
    • Lock是接口,需手动调用lock()unlock()
  2. 功能层面

    • 共同点:均支持互斥、同步、锁重入(可重入性)。
    • 差异Lock额外支持可中断、超时、公平锁、多条件变量等功能。
  3. 性能层面

    • 无竞争时synchronized通过偏向锁和轻量级锁优化,性能更优。
    • 高竞争时Lock(如ReentrantLock)通常表现更好,因其减少了上下文切换。

四、使用方式

  1. 修饰实例方法
    锁定当前对象实例(this),进入方法前需获取实例锁。

  2. 修饰静态方法
    锁定类对象(Class对象),作用于所有实例。

  3. 修饰代码块
    可指定任意对象(如synchronized(obj))或类(synchronized(Class))作为锁。

五、其他特性

  1. 可重入性
    线程可重复获取同一把锁,避免死锁。例如,递归调用同步方法不会阻塞。

  2. 锁释放
    线程执行完同步代码或抛出异常时,JVM自动释放锁,无需手动干预。

相关文章:

  • WiFi IEEE 802.11协议精读:IEEE 802.11-2007,7,Frame formats帧格式
  • VUE_使用Vite构建vue项目
  • 高考數學。。。
  • DeepSeek 全套资料pdf合集免费下载(持续更新)
  • 强化学习-随机近似与随机梯度下降
  • 18.5 ChatGLM2-6B 开源协议深度解读:自由与约束的平衡之道
  • 力扣HOT100之哈希:49. 字母异位词分组
  • macOS 安装JDK17
  • React:Router路由
  • 信奥赛CSP-J复赛集训(DP专题)(14):P7158 「dWoi R1」Password of Shady
  • JavaScript 知识点整理
  • AI赋能低代码平台可行性研究报告
  • docker学习笔记(1)从安装docker到使用Portainer部署容器
  • AI数据分析:deepseek生成SQL
  • Docker 学习(三)——数据管理
  • 《Operating System Concepts》阅读笔记:p180-p187
  • 【C++】当一个类A中没有声明任何成员变量和成员函数,sizeof(A)是多少?
  • shell文本处理
  • 深度学习的隐身术:详解 PyTorch nn.Dropout
  • Scala:for 循环遍历形式基本简单介绍(基础,高级,for-yield,特殊场景)
  • 百度收录网站但首页快照不更新/时事新闻最新
  • 一个网站域名的组成/宣传网站有哪些
  • 外国人做中国数学视频网站/太原百度快速优化排名
  • 成都住建局官网查询电话/seo网站推广简历
  • 简单的购物网站模板/html网页制作步骤
  • 怎么做猫的静态网站/网站优化推广外包