偏向锁,如果利用CAS来保证线程的同步?
偏向锁不是比较和设置吗,在偏向锁竞争的时候如果线程A没有退出同步代码块的时候,线程B利用CAS来替换ThreadID值,并且成功了 那么线程B就也同样进入同步代码块了,这不是有问题吗
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
偏向锁不是比较和设置吗,在偏向锁竞争的时候如果线程A没有退出同步代码块的时候,线程B利用CAS来替换ThreadID值,并且成功了 那么线程B就也同样进入同步代码块了,这不是有问题吗
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
B线程会先检测锁是否是偏向于某个线程的偏向锁,如果发现是偏向锁会检测偏向的线程是否存活,如果不存活则将当前锁重新偏向于B线程,获取偏向锁。如果存活则遍历偏向线程的栈,检查该对象的使用情况,如果仍然需要持有偏向锁,则偏向锁升级为轻量级锁,(偏向锁就是这个时候升级为轻量级锁的)。如果不存在使用了,则可以将对象回复成无锁状态,然后重新偏向。
最近也在研究这部分,我理解线程B利用CAS偏向对象头中锁时,即占用临界区。此时线程A也就失去锁。