偏向锁不是比较和设置吗,在偏向锁竞争的时候如果线程A没有退出同步代码块的时候,线程B利用CAS来替换ThreadID值,并且成功了 那么线程B就也同样进入同步代码块了,这不是有问题吗
偏向锁不是比较和设置吗,在偏向锁竞争的时候如果线程A没有退出同步代码块的时候,线程B利用CAS来替换ThreadID值,并且成功了 那么线程B就也同样进入同步代码块了,这不是有问题吗
3 回答2.6k 阅读✓ 已解决
3 回答4.1k 阅读✓ 已解决
8 回答3.6k 阅读
4 回答2.7k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
3 回答1.7k 阅读✓ 已解决
B线程会先检测锁是否是偏向于某个线程的偏向锁,如果发现是偏向锁会检测偏向的线程是否存活,如果不存活则将当前锁重新偏向于B线程,获取偏向锁。如果存活则遍历偏向线程的栈,检查该对象的使用情况,如果仍然需要持有偏向锁,则偏向锁升级为轻量级锁,(偏向锁就是这个时候升级为轻量级锁的)。如果不存在使用了,则可以将对象回复成无锁状态,然后重新偏向。