Jvm Is ReentrantLock是一款重量较轻的锁?;

Jvm Is ReentrantLock是一款重量较轻的锁?;,jvm,reentrantlock,Jvm,Reentrantlock,众所周知,HotSpot VM有偏置锁、自旋锁、轻量级锁、重量级锁等,而ReentrantLock是由AbstractQueuedSynchronizer(AQS)实现的。因此,ReentrantLock在JVM中是一个轻量级锁?这些是不同的概念 自旋锁、偏置锁等是用于实现锁定机制(互斥)的算法/结构的名称 在热点术语中,偏向锁、轻量级(瘦)锁和重量级(膨胀)锁是Java内部监视器的可能状态,即可以使用synchronized关键字同步的Java对象 在不同的时刻,同一个Java监视器可能处于不

众所周知,HotSpot VM有偏置锁、自旋锁、轻量级锁、重量级锁等,而ReentrantLock是由AbstractQueuedSynchronizer(AQS)实现的。因此,ReentrantLock在JVM中是一个轻量级锁?

这些是不同的概念

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

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

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

  • 在第一次尝试锁定时,对象偏向某个线程
  • 稍后,当另一个线程获得锁时,偏置被撤销,并且监视器被一个简单的CAS成功地重新获取-这将是一个瘦锁
  • 最后,当另一个线程尝试获取已锁定的监视器时,锁会被充气
  • ReentrantLock
    是一个Java类,它独立于Java内部监视器实现互斥体的语义。也就是说,术语偏置、薄和膨胀不适用于
    ReentrantLock


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

    这是不同的概念

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

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

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

  • 在第一次尝试锁定时,对象偏向某个线程
  • 稍后,当另一个线程获得锁时,偏置被撤销,并且监视器被一个简单的CAS成功地重新获取-这将是一个瘦锁
  • 最后,当另一个线程尝试获取已锁定的监视器时,锁会被充气
  • ReentrantLock
    是一个Java类,它独立于Java内部监视器实现互斥体的语义。也就是说,术语偏置、薄和膨胀不适用于
    ReentrantLock

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