【问题标题】:Is ReentrantLock is a light weight lock?ReentrantLock 是轻量级锁吗?
【发布时间】:2020-07-16 09:59:10
【问题描述】:

众所周知,HotSpot VM有偏置锁、自旋锁、轻量级锁、重量级锁等,而ReentrantLock是通过AbstractQueuedSynchronizer(AQS)实现的。那么ReentrantLock是JVM中的轻量级锁吗?

【问题讨论】:

    标签: jvm reentrantlock


    【解决方案1】:

    这些是不同的概念。

    自旋锁、偏向锁等是用于实现锁定机制(互斥锁)的算法/结构的名称。

    在 HotSpot 术语中,偏向锁、轻量级(瘦)锁和重量级(膨胀)锁是 Java 内在监视器的可能状态,即可以使用 synchronized 关键字同步的 Java 对象。

    在不同的时刻,同一个Java监视器可以处于不同的状态,例如

    1. 在第一次锁定尝试时,对象偏向到某个线程。
    2. 稍后,当另一个线程获取锁时,偏向被撤销,并且使用简单的 CAS 成功重新获取了监视器 - 这将是一个 thin 锁。
    3. 最后,当另一个线程试图释放已经锁定的监视器时,锁膨胀

    ReentrantLock 是一个 Java 类,它独立于 Java 内部监视器实现互斥体的语义。也就是说,术语 biasedthininflated 不适用于ReentrantLock

    同时ReentrantLock的实现也有多个不同的路径。在一个简单的情况下,在没有争用的情况下,获取ReentrantLock 是单个 CAS 的问题。在竞争情况下,ReentrantLock 涉及等待队列,并调用park 将当前线程从RUNNABLE 切换到WAITING 状态。从这个意义上说,该机制类似于 JVM 的瘦锁和膨胀锁。但是再说一遍:由于ReentrantLock 不是一个内在的监视器,因此将其与 JVM 的轻量级和重量级锁进行比较并不完全正确。

    【讨论】:

      猜你喜欢
      • 2011-02-01
      • 2010-09-29
      • 2011-06-16
      • 2012-06-26
      • 2011-08-31
      • 1970-01-01
      • 2016-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多