jdk的轻量级锁和偏向锁

本文介绍了JDK从1.5版本开始对synchronized进行的性能优化,包括自旋锁、自适应自旋、轻量级锁和偏向锁。自旋锁允许线程在获取锁时进行自旋等待,减少线程状态切换的开销。自适应自旋则根据历史信息调整自旋次数。轻量级锁在无锁竞争时提供高效同步。偏向锁优化了单线程场景下锁的获取。这些优化提升了并发环境下synchronized的效率。
摘要由CSDN通过智能技术生成


jdk1.5之后各个版本都针对并发锁这块做了优化,之前说synchornized的性能不如concurrent包中的Lock,jdk的高版本中可不能这么说,jdk5之后 synchornized的性能和Lock的性能其实差别不大,貌似jdk8中ConcurrentHashMap中已经取消了Segement(继承了ReetrantLock)而用了synchronized进行加锁,一切都因oracle公司对synchronize的性能做了一下方面的优化:(有时间再写)

纯属个人理解,

  1 .自旋和适应性自旋

自旋锁:实际上是线程在获取锁的时候,在jvm的锁层面做了优化,每次在获取锁的时候,如果锁已经被持有,则不会立即挂起线程,应为挂起线程开销很大,线程会从核心态转化成用户态,涉及到线程调度。jvm的设计人员为了尽量少的避免线程调度,造成的系统系统开销,则会通过让程序线程处于核心态并且等一会儿,看看会不会得到锁,也就是让线程自旋处于忙等的状态,这个是可以通过jvm启动参数配置的,如果自旋完成还没拿到,才会从核心态转为用户态。

       自适应自旋:是对自旋的更智能的优化,会根据近期在这个锁上的线程自旋等待周期,算出一个合理的值,让当前线程根据这个值去自旋等待


    自旋锁和自适应自旋其实是为了减少线程状态切换系统开销,适当的情况下可能会很有用,如果使用的不是很恰当很可能造成多余的线程忙等。

   2.轻量级锁

<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值