synchronized锁升级
2025-02-26 15:12:05 0 举报
Sentinel源码分析,分享给大家学习。 更多干货内容,欢迎关注我的公众号:Fox爱分享
作者其他创作
大纲/内容
偏向锁解锁:还是偏向锁
01
指向monitor的指针(指向重量级锁对象)
加锁/解锁
age
偏向锁撤销:当前对象未锁定
0
指向lock record的指针(指向轻量级锁对象)
001
1
epoch
偏向锁状态(绑定偏向线程的ThreadId)
10
偏向锁状态(未锁定,未偏向但是可偏向的对象:没有绑定threadId)
禁用偏向锁或者不满足延迟偏向条件
无锁状态膨胀,创建monitor对象,修改markword
轻量级锁膨胀,创建monitor对象,修改markword
00
解锁
持有偏向锁的线程之后进入同步块,JVM不会进行任何同步操作
101
通过CAS将当前线程id设置到锁对象的MarkWord中
开始
创建锁对象obj
ThreadId
HashCode
轻量级锁状态
重量级锁状态
偏向锁撤销:如果当前对象锁定,同步块中调用hashcode或者wait方法
偏向锁撤销:如果当前对象锁定
重偏向
无锁状态(未被锁定,不可偏向的对象)
延迟偏向(4s)
收藏
收藏
0 条评论
下一页