针对jdk1.6以上的版本锁优化

Posted ivy-xu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了针对jdk1.6以上的版本锁优化相关的知识,希望对你有一定的参考价值。

锁优化

自适应的自旋锁

自旋锁,为了让线程等待,让线程执行一个忙循环(自旋)。超过10次仍然没有成功获取锁,线程挂起。

自适应的自旋锁,前一次在同一个锁上的自旋时间和锁的拥有者的状态决定。在同一个锁对象上,自旋等待刚刚成功获得过锁,并且持有锁的线程正在进行中,那么虚拟机就会认为这次自旋也很有可能再次成功,进而它将允许自旋等待持续相对更长的时间,比如100个循环。另一方面,如果对于某个锁,自旋很少成功获得过,那在以后获取这个锁时将可能省略掉自旋过程,以避免浪费处理器资源。

锁粗化

JVM检测一串操作都对同一对象加锁,把加锁同步的范围粗化到整个操作序列的外部。

锁消除

JVM在JIT编译运行时,通过对运行上下文的扫描,去除不可能存在共享数据竞争的锁。判断依据逃逸分析,判断堆上的数据不会被其它线程访问,那么把它们当做栈上的数据对待,认为它们是私有,同步加锁自然无须进行。

轻量级锁

jdk6引入。对于绝大部分锁,在整个生命周期内不会存在竞争。没有竞争,使用CAS消除互斥量。

偏向锁

jdk6引入。对于绝大部分锁,在整个生命周期内不会存在竞争,并且总由同一个线程多次获得。这个锁偏向第一个获取它的线程,如果接下来的执行中,该锁没有被其它的线程获取,则持有偏向锁的线程永远不需要再进行同步。

 

https://www.jianshu.com/p/b516a981a1a7

以上是关于针对jdk1.6以上的版本锁优化的主要内容,如果未能解决你的问题,请参考以下文章

synchronized底层实现及优化机制

synchronized底层实现及优化机制

synchronized底层实现及优化机制

在使用JDK1.7及以上版本时无法连接数据库、无法连接sftp. 只有将环境变量改为JDK1.6后才可以使用。

synchronized底层实现及优化机制

jdk1.6与jdk1.8的哪些Spring注解不能用