# 锁的四种状态

  1. 无所态
  2. 偏向锁
  3. 轻量级锁(自旋形式)
  4. 重量级锁

# 锁状态升级(膨胀)

https://www.zhihu.com/search?type=content&q=%E9%94%81%E7%8A%B6%E6%80%81%E5%8D%87%E7%BA%A7

也不重复板砖了,简单描述一下

1-5偏向锁过程、6-9轻量级锁过程、10重量级锁

  1. 线程A刚开始执行时,在markword处贴上自己的线程ID
  2. 线程A执行完成后,撤退
  3. 线程B过来执行,发现mardword处贴着线程A的ID
  4. JVM协助判断一下,发现线程A已经执行完了,所以把markword处线程A的ID撕掉,贴上线程B的ID
  5. 线程B开始执行

  1. 线程C也过来执行,但是markword上贴着B的线程ID
  2. JVM协助判断,发现B还在工作
  3. 这个时候C开始自旋,CAS方式,视图将markword更改为自己栈帧中的指针
  4. B完成之后,B和C要同时自旋,抢着修改markword

  1. JVM会自动判断,如果自旋次数过多,则自动转变为重量级锁

膨胀后不可降级,但有的文章也提到GC阶段会降级