锁的优化

Posted bockpecehhe

tags:

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

锁粗化

  虚拟机遇到一连串连续的对同一锁不断的进行请求和释放的操作,把所有的锁操作整合成对锁的一次请求

synchronized (lock){
                    for(int i=0;i<20;i++){
                        // do sth
                    }
                }

锁偏向

如果一个线程获得锁,那么就进入偏向模式,下次再次请求锁时,无须进行同步操作,节省了锁申请的时间,对于锁竞争比较激烈的场合不佳,这样会导致偏向模式失效

JAVA虚拟机参数 -XX:+UseBiasedLocking开启

轻量级锁

把对象头部作为指针,指向持有锁线程的内部堆栈,来判断线程是否持有对象锁

子旋锁

当前线程暂时无法获得锁,本应该挂起,但是虚拟机进行一次赌博,CPU循环几次(空循环),如果可以得到锁,那么进入临界区,如果不能,进行挂起

锁消除

Java虚拟机在JIT编译时,通过上下文的扫描,去除不可能存在共享资源竞争的锁,比如使用了StringBuffer Vector

 



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

锁的优化

优化读/写锁的实现

优化 C# 代码片段、ObservableCollection 和 AddRange

Java多线程锁的优化策略

浅谈自旋锁和 JVM 对锁的优化

LockSupport.java 中的 FIFO 互斥代码片段