标签:个数 疑惑 逻辑 存储 bsp 代码块 解决 com 图解
上面是网上拷的图
具体的转换周志明那本书上都有,这张图解决我自己的疑惑的地方有:
1、markword 01标志既可以是无锁,也可以是偏向锁。所以前面需要有一个标志位标志是否偏向锁。
2、如果线程A占有偏向锁,线程B竞争获取偏向锁要等到线程A执行到safepoint(safepoint这个以后再讲),检测A是否已经走出同步代码块或者已经被挂起,如果是,
撤销A加在markword上的偏向锁,变成属于B的偏向锁。如果不是,把A加在线程上的偏向锁变成轻量级锁,那么这时候等待的B要走轻量级锁竞争的逻辑了:自旋,
在一定时间内A释放了轻量级锁,B就能获取到。超时了之后,A的轻量级锁膨胀成重量级锁,使锁变成一个拥有可以存储挂起线程(B)和wait的线程的一个数据结构,
然后使B休眠。
标签:个数 疑惑 逻辑 存储 bsp 代码块 解决 com 图解
原文地址:https://www.cnblogs.com/chuliang/p/11877788.html