# 锁的四种状态
- 无所态
- 偏向锁
- 轻量级锁(自旋形式)
- 重量级锁
# 锁状态升级(膨胀)
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重量级锁
- 线程A刚开始执行时,在markword处贴上自己的线程ID
- 线程A执行完成后,撤退
- 线程B过来执行,发现mardword处贴着线程A的ID
- JVM协助判断一下,发现线程A已经执行完了,所以把markword处线程A的ID撕掉,贴上线程B的ID
- 线程B开始执行
- 线程C也过来执行,但是markword上贴着B的线程ID
- JVM协助判断,发现B还在工作
- 这个时候C开始自旋,CAS方式,视图将markword更改为自己栈帧中的指针
- B完成之后,B和C要同时自旋,抢着修改markword
- JVM会自动判断,如果自旋次数过多,则自动转变为重量级锁
膨胀后不可降级,但有的文章也提到GC阶段会降级
← 对象内存模型、对象头 锁消除、锁粗化 →