美文网首页
JVM的同步锁原理及应用

JVM的同步锁原理及应用

作者: 自天佑之吉无不利 | 来源:发表于2023-10-23 21:58 被阅读0次

    Java 中的同步锁机制是 Java 并发编程的基础,它可以保证在多线程环境下对共享资源的互斥访问。在 Java 中,同步锁机制主要由 Synchronized 关键字实现。

    锁的状态与类型

    Synchronized 是 Java 中最具代表性的互斥同步手段之一,它在底层实现上并不依赖于 Lock 接口及其实现类。Synchronized 所依赖的是 JVM 内部的监视器锁(monitor)。在竞争程度较低的场景下,Synchronized 可以提供较高的性能。在 JVM 对 Synchronized 进行优化后,如使用偏向锁、轻量级锁等,能使其在无竞争和轻度竞争情况下避免重量级锁使用操作系统互斥量带来的性能消耗。

    锁的状态及 JVM 视角

    从 JVM 的角度来看,锁的状态可以分为 0、1、2、3 四种,分别表示无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态。这些状态反映了锁的不同竞争程度和性能特点。锁还有一个计数器,用于记录线程进入同步块的层数。

    锁的类型

    Java 中的锁主要分为三种:偏向锁、轻量级锁和重量级锁。这三种锁在不同的场景下具有不同的性能特点。偏向锁:

    • 偏向锁是一种针对单线程访问的优化手段。当一个线程首次访问某个对象时,偏向锁会尝试获取该对象的锁。如果后续的访问仍然是这个线程,那么偏向锁就不需要再次获取锁,从而减少了锁的竞争开销。
    • 轻量级锁:主要针对多线程访问的场景。当多个线程同时访问某个对象时,轻量级锁通过自旋等待的方式实现锁的获取,以降低线程的阻塞程度。
    • 重量级锁:重量级锁是一种比较传统的锁优化手段,它在锁的竞争激烈时能够提供更好的性能。当轻量级锁的自旋等待时间超过一定阈值时,锁会升级为重量级锁。

    此文章为10月Day20学习笔记,内容来源于极客时间《云时代的JVM》,强烈推荐该课程

    相关文章

      网友评论

          本文标题:JVM的同步锁原理及应用

          本文链接:https://www.haomeiwen.com/subject/ssvjidtx.html