jdk的轻量级锁和偏向锁
Posted 乔不思
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdk的轻量级锁和偏向锁相关的知识,希望对你有一定的参考价值。
jdk1.5之后各个版本都针对并发锁这块做了优化,之前说synchornized的性能不如concurrent包中的Lock,jdk的高版本中可不能这么说,jdk5之后 synchornized的性能和Lock的性能其实差别不大,貌似jdk8中ConcurrentHashMap中已经取消了Segement(继承了ReetrantLock)而用了synchronized进行加锁,一切都因oracle公司对synchronize的性能做了一下方面的优化:(有时间再写)
纯属个人理解,
1 .自旋和适应性自旋
自旋锁:实际上是线程在获取锁的时候,在jvm的锁层面做了优化,每次在获取锁的时候,如果锁已经被持有,则不会立即挂起线程,应为挂起线程开销很大,线程会从核心态转化成用户态,涉及到线程调度。jvm的设计人员为了尽量少的避免线程调度,造成的系统系统开销,则会通过让程序线程处于核心态并且等一会儿,看看会不会得到锁,也就是让线程自旋处于忙等的状态,这个是可以通过jvm启动参数配置的,如果自旋完成还没拿到,才会从核心态转为用户态。
自适应自旋:是对自旋的更智能的优化,会根据近期在这个锁上的线程自旋等待周期,算出一个合理的值,让当前线程根据这个值去自旋等待
自旋锁和自适应自旋其实是为了减少线程状态切换系统开销,适当的情况下可能会很有用,如果使用的不是很恰当很可能造成多余的线程忙等。
2.轻量级锁
轻量级锁:实际上它是在没有锁竞争的条件下,避免了重量级互斥锁,这样就提高了在系统的执行效率
3.偏向锁
偏向锁:偏向锁是对轻量级锁的进一步优化,减少了单线程情况下没有必要的自选等待。
锁的类型:偏向锁,轻量级锁,重量级锁
jdk的轻量级锁和偏向锁(参考链接)
以上是关于jdk的轻量级锁和偏向锁的主要内容,如果未能解决你的问题,请参考以下文章
虚拟机中的锁优化简介(适应性自旋/锁粗化/锁削除/轻量级锁/偏向锁)