若节
2018-01-28 16:19
采纳率: 100%
浏览 1.2k
已采纳

偏向锁 ,synchronized相关的

偏向锁加锁过程什么的都了解了点,不过不太清楚底层什么时候使用偏向锁,是不是任何synchronized相关的都是从偏向锁开始的(在开启偏向锁的情况下)。

若是上面的假设成立,synchronized了解到实现原理是与monitor对象有关的,感觉和偏向锁实现原理不太一样(所以上面假设就不对了),是不是这样子的。有没有朋友了解些,帮忙为我指点下迷津。

感谢您的回复。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • oyljerry 2018-01-29 10:41
    已采纳

    新版本的JDK比如1.8等,synchronized会有多种锁的优化和升级
    JDK 1.6中默认是开启偏向锁和轻量级锁的,我们也可以通过-XX:-UseBiasedLocking来禁用偏向锁。
    偏向锁状态,轻量级锁状态和重量级锁状态,它会随着竞争情况逐渐升级

    点赞 打赏 评论
  • blownewbee 2018-01-28 16:25

    偏向锁用于有同步但无竞争的场景。synchronized并不代表用偏向锁
    具体参考这篇文章:http://blog.csdn.net/wolegequdidiao/article/details/45116141

    点赞 打赏 评论
  • 思不凡的人生 2018-01-29 07:11

    偏向锁可以关闭的,不关闭情况下,首先是偏向锁,如果发生锁竞争,会变为轻量锁,如果再次竞争激烈就会自动变为重量锁

    点赞 打赏 评论
  • yizishou 2018-01-30 10:50

    偏向锁信息是记录在对象头中的。当对象处于偏向锁状态时,它的对象头中的_mark字段中会记录它所偏向的线程的指针,因此被偏向的线程访问对象时只需要验证对象头,没有同步操作;

    当锁膨胀之后,对象头的_mark字段记录的就是指向锁对象的指针了

    点赞 打赏 评论

相关推荐 更多相似问题