锁的优化

编程

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

    (1)降低 锁 的范围 例如:将方法上的锁可以加到 代码快上

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

              锁分离延伸:只要操作互不影响,就可以锁分离,例如 LinkedBlockingQuene

     (3)减少锁力度:将一个大对象拆分成对个小对象,每个小对象可以被一个线程访问,例子:CurrentHashMap

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

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

       

public void demoMethod(){

synchronized(lock){

//do sth. }

//做其他不需要的同步的工作,但能很快执行完毕

synchronized(lock){

//do sth. }

}

==》粗化:

 

==》粗化

 

(5)锁消除:在即时编译器时,如果发现不可能被共享的对象,则可以消除这些对象的锁操作

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

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

          

2. 什么是大对象?

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

 

 

3. 锁消除是在哪儿做?

答:在 JVM中

 

 

以上是 锁的优化 的全部内容, 来源链接: utcz.com/z/511754.html

回到顶部