jdk1.8对synchronized锁的优化

本文介绍了JDK1.8中synchronized锁的四种状态:无锁、偏向锁、轻量级锁和重量级锁。偏向锁减少无竞争时的加锁开销,轻量级锁避免线程阻塞,适用于短时锁。当竞争激烈或自旋次数过多时,锁会升级为重量级锁。此外,还讨论了锁粗化和锁消除等优化策略,以提高并发性能。
摘要由CSDN通过智能技术生成

synchronized 锁的优化:锁的四种状态-无锁,偏向锁、轻量级锁,重量级锁

img

1、偏向锁:原因是大多数时候是不存在锁竞争的,常常是一个线程多次获得同一个锁,因此如果每次都要竞争锁会增大很多没有必要付出的代价,为了降低获取锁的代价,才引入的偏向锁

偏向锁的升级:当线程1访问代码块并获取锁对象时,会在java对象头和栈帧中记录偏向的锁的threadID,因为偏向锁不会主动释放锁,以后线程1再次获取锁时比较当前线程的threadID和Java对象头中的threadID是否一致,如果一致(还是线程1获取锁对象),则无需使用CAS来加锁、解锁;如果不一致(如线程2要竞争锁对象,而偏向锁不会主动释放因此还是存储的线程1的threadID),那么查看Java对象头中记录线程1是否存活,如果没有存活,那么锁对象被重置为无锁状态,其它线程(线程2)可以竞争将其设置为偏向锁;如果存活,那么立刻查找该线程(线程1)的栈帧信息,如果还是需要继续持有这个锁对象,那么暂停当前线程1,撤销偏向锁,升级为轻量级锁,如果线程1 不再使用该锁对象,那么将锁对象状态设为无锁状态,重新偏向新的线程。

 

2、轻量级锁:考虑的是竞争锁对象的线程不多,而且线程持有锁的时间也不长的情景。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值