偏向锁,如果利用CAS来保证线程的同步?

新手上路,请多包涵

偏向锁不是比较和设置吗,在偏向锁竞争的时候如果线程A没有退出同步代码块的时候,线程B利用CAS来替换ThreadID值,并且成功了 那么线程B就也同样进入同步代码块了,这不是有问题吗

阅读 2.3k
2 个回答

B线程会先检测锁是否是偏向于某个线程的偏向锁,如果发现是偏向锁会检测偏向的线程是否存活,如果不存活则将当前锁重新偏向于B线程,获取偏向锁。如果存活则遍历偏向线程的栈,检查该对象的使用情况,如果仍然需要持有偏向锁,则偏向锁升级为轻量级锁,(偏向锁就是这个时候升级为轻量级锁的)。如果不存在使用了,则可以将对象回复成无锁状态,然后重新偏向。

新手上路,请多包涵

最近也在研究这部分,我理解线程B利用CAS偏向对象头中锁时,即占用临界区。此时线程A也就失去锁。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏