A线程持有偏向锁,B线程竞争锁,偏向锁升级为轻量级锁,A继续执行,此时B线程会做什么?自旋吗?如果是自旋会不会出现一种情况,同是AB两个线程竞争锁,锁的状态可能因为这两个线程从偏向锁升级到轻量级在升级到重量级?
如图所示:红色圆圈的地方就是偏向锁升级轻量级锁不确定的地方,没有获取到轻量级的锁会继续尝试获取?
A线程持有偏向锁,B线程竞争锁,偏向锁升级为轻量级锁,A继续执行,此时B线程会做什么?自旋吗?如果是自旋会不会出现一种情况,同是AB两个线程竞争锁,锁的状态可能因为这两个线程从偏向锁升级到轻量级在升级到重量级?
如图所示:红色圆圈的地方就是偏向锁升级轻量级锁不确定的地方,没有获取到轻量级的锁会继续尝试获取?
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
线程B会再次获取锁 如果再失败 会膨胀成重量级锁 然后自旋一定次数失败后挂起
Ps:我看的源码里和图上的一般说法上认为有出入 并不是先自旋失败再膨胀 而是直接膨胀 再自旋,可能有误
但不管是哪种方式 反正B一直获取锁失败会膨胀成重量级锁就是了