锁的优化

1. 锁的优化有哪些手段?java

    (1)下降 锁 的范围 例如:将方法上的锁能够加到 代码快上安全

     (2)锁分离:读读之间不须要同步,读写和写写之间才须要同步,例如:读写锁多线程

              锁分离延伸:只要操做互不影响,就能够锁分离,例如 LinkedBlockingQuene并发

     (3)减小锁力度:将一个大对象拆分红对个小对象,每一个小对象能够被一个线程访问,例子:CurrentHashMap性能

     (4)锁粗化:为了保证多线程间的有效并发,会要求每一个线程持有锁的时间尽可能短,即在使用完 公共资源后,应该当即释放锁。只有这样,等待在这个锁上的其余线程才能尽早的得到资源执行 任务。可是,凡事都有一个度,若是对同一个锁不停的进行请求、同步和释放,其自己也会消耗 系统宝贵的资源,反而不利于性能的优化优化

           例子:for循环中 锁 加在循环外比 加载循环里 好spa

       

public void demoMethod(){
    synchronized(lock){
    //do sth. }
    //作其余不须要的同步的工做,但能很快执行完毕
    synchronized(lock){
    //do sth. } 
}

==》粗化:线程

 

==》粗化code

 

(5)锁消除:在即时编译器时,若是发现不可能被共享的对象,则能够消除这些对象的锁操做对象

            名称:不可被共享的对象(方法中声名的对象,且没有越界:没有将该对象return)

          例如:StringBuffer不可被共享,但StringBuffer是线程安全的,全部须要去掉锁

          

2. 什么是大对象?

答:多个线程须要同时访问的对象

 

 

3. 锁消除是在哪儿作?

答:在 JVM中

相关文章
相关标签/搜索