java同步锁升级流程
2021-04-27 11:36:24 0 举报
java同步锁升级流程
作者其他创作
大纲/内容
返回结果
锁释放
2bit
存活
CAS操作: 线程的ID -> Mark Word
锁升级 偏向锁->轻量级锁
获取锁失败
1bit
偏向锁
锁状态
Markword
轻量级锁
自旋来获取锁对象
对象变为无锁状态CAS操作:锁对象偏向自己
GC
count_
对象头
owner
Length
EntryList
线程ID
CAS操作:将锁对象的Mark Word更新为指向Lock Record的指针
线程A暂停运行同步块代码
分代年龄
线程A
检测是否存活
23
实例对象
运行同步代码块
01
11
替换成功
线程A首次进入
检测锁偏向线程是否存活
重量锁
锁升级
轻量锁
ObjectMonitor
同步代码块运行
锁释放轻量级锁->偏向锁
25bit
不存活
线程B进入线程A尚未运行结束
指向互斥变量(ObjectMonitor)的指针
1
升级为重量级锁
CAS操作:锁对象的MarkWord和线程的LockRecord替换
0
在线程的栈帧中建立锁记录空间用于存储Mark Word的拷贝
线程B
升级为轻量级锁
替换失败
2
对象hashcode
对象体
线程A再次进入
获取锁成功
设置对象头Markword的锁标志== 00
WaitSet
锁标志
类型指针
无
指向栈中锁记录的指针
填充对象
4bit
发现锁偏向对象非本线程
锁释放轻量级锁->重量级锁
10
doing.......
00
重量级锁
0 条评论
下一页