java锁-偏向锁

偏向锁: HotSpot作者发现,大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,为了让线程获取锁的代价更低,引入了偏向锁,当一个线程访问同步块并获取锁时,会在对象头和栈贞中的锁记录里存储锁偏向的线程id,以后该线程进入和退出该同步块时,不需要进行CAS操作来获取和释放锁,只需简单的测试一下对象头的Mark Word里是否存储着指向当前线程的偏向锁,如果测试成功,表明线程已经获得了该锁,如果测试失败,则需再测试一下Mark Word中偏向锁的标识是否设置为1(表示当前是偏向锁),如果没有设置,则使用CAS来竞争锁,如果设置了,则尝试使用CAS将对象头的偏向锁指向当前线程.

    偏向锁的撤销:

偏向 使用了一种等到竞 争出 的机制,所以当其他 线 尝试竞 争偏向 锁时
持有偏向 线 程才会 。偏向 的撤 ,需要等待全局安全点(在 时间 点上没有正
行的字 节码 )。它会首先 有偏向 线 程,然后 检查 持有偏向 线 程是否活着,
如果 线 程不 于活 头设 置成无 ;如果 线 程仍然活着, 有偏向
会被 行,遍 偏向 象的 锁记录 中的 锁记录 Mark Word 要么重新偏向于其他
线 程,要么恢复到无 或者 标记对 象不适合作 偏向 ,最后 停的 线 程。
 
关闭偏向锁:
           
偏向 Java 6 Java 7 里是默 启用的,但是它在 用程序启 几秒 之后才激活,如
有必要可以使用 JVM 参数来关 :-XX:BiasedLockingStartupDelay=0。如果你确定 用程
序里所有的 通常情况下 争状 ,可以通 JVM 参数关 偏向 :-XX:- UseBiasedLocking=false,那么程序默 级锁
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值