码迷,mamicode.com
首页 > 其他好文 > 详细

synchronized 三种锁的转换

时间:2019-11-17 21:05:46      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:个数   疑惑   逻辑   存储   bsp   代码块   解决   com   图解   

 

技术图片

 

上面是网上拷的图

具体的转换周志明那本书上都有,这张图解决我自己的疑惑的地方有:

1、markword 01标志既可以是无锁,也可以是偏向锁。所以前面需要有一个标志位标志是否偏向锁。

2、如果线程A占有偏向锁,线程B竞争获取偏向锁要等到线程A执行到safepoint(safepoint这个以后再讲),检测A是否已经走出同步代码块或者已经被挂起,如果是,

撤销A加在markword上的偏向锁,变成属于B的偏向锁。如果不是,把A加在线程上的偏向锁变成轻量级锁,那么这时候等待的B要走轻量级锁竞争的逻辑了:自旋,

在一定时间内A释放了轻量级锁,B就能获取到。超时了之后,A的轻量级锁膨胀成重量级锁,使锁变成一个拥有可以存储挂起线程(B)和wait的线程的一个数据结构,

然后使B休眠。

synchronized 三种锁的转换

标签:个数   疑惑   逻辑   存储   bsp   代码块   解决   com   图解   

原文地址:https://www.cnblogs.com/chuliang/p/11877788.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!