多线程 - 如何进行锁优化

1、减少锁持有的时间

  减少锁持有的时间指只在有线程安全的程序上加锁来尽量减少同步代码快对锁的持有时间。

public synchronized void syncMethod(){
    othercode1();
    mutextMethod();
    othercode2();}
   
   //优化后:
public void syncMethod2(){
    othercode1();
    synchronized(this){
        mutextMethod();
    }
    othercode2();}
 
注意:减少锁的持有时间有助于降低锁冲突的可能性,进而提升系统的并发能力。

2、减小锁粒度

  减小锁粒度指将单个耗时较多的锁操作拆分为多个耗时较少的锁操作来增加锁的并发度,减少同一个锁上的竞争。在减少锁的竞争之后,偏向锁,轻量级锁的使用率才会提高。最典型的例子就是jdk1.7中的ConcurrentHashMap中的分段锁

3、锁分离

  锁分离指根据不同的场景将锁的功能进行分离,以应对不同的拜变化,最常见的锁分离思想就是读写锁【ReadWriteLock】,它根据锁的功能将锁分离成读锁和写锁,这样读读不互斥,读写互斥,写写互斥,既保证了线程安全,又提高了性能。
  操作分离思想的可以进一步延伸为只要操作互不影响,就可以进一步拆分,比如LinkedBlockingQueue从头部取数据,并从尾部加入数据。

4、锁粗化

  锁粗化指为了保证性能,会要求尽可能将锁的操作细化以减少线程持有锁的时间,但是如果锁分的太细,将会导致系统频繁的获取锁和释放锁,反而影响性能的提升。在这种情况下,建议将关联性强的锁集中起来处理,以提高系统整体的效率。

5、锁消除

  在开发中经常会出现在不需要使用锁的情况下误用了锁操作而引起性能的下降,这多数是因为程序编码不规范引起的。检查并消除这些锁来提高系统的性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值