synchronized锁升级
2023-09-05 23:10:19 0 举报
synchronized锁升级过程
作者其他创作
大纲/内容
偏向状态(未锁定为偏向但是可偏向的对象:没有绑定ThreadId)
10
偏向锁撤销:当前对象未锁定
延迟偏向(4s)
创建锁对象obj
无所状态(为被锁定,不可偏向的对象)
01
加锁,修改MarkWord,并拷贝MarkWord到线程栈上的Lock Record中
禁用偏向锁或不满足延迟偏向条件
指向lock record的指针(指向轻量锁对象)
1
重量级锁状态
age
epoch
00
解锁
指向monitor的指针(指向重量锁对象)
通过CAS将当前线程id设置到锁对象的MarkWord中
持有偏向锁的线程之后进入这个锁相关的同步块,JVM不会进行任何同步操作
偏向锁状态(绑定偏向线程的ThreadId)
ThreadId
重偏向
开始
001
偏向锁撤销:如果当前对象锁定
轻量级锁彭胀,创建monitor对象,修改MarkWord
0
HashCode
lock/unlock
偏向锁撤销:如果当前对象锁定,同步块走红调用hashCode或者wait方法
轻量级锁状态
101
无锁状态膨胀,创建monitor对象,修改markword
0 条评论
下一页