Java基础六续(补充)之多线程编程中的锁优化

  • 锁优化原因

    • 加锁会带来性能上的消耗(解决线程同步问题同时)。理解:加锁本身不会带来多少性能消耗,主要在线程的获取锁的过程。
  • 锁优化思路

    1. 尽量不要锁方法

      • 普通成员方法上加锁,线程获得的是该方法所在对象的对象锁。此时整个对象是被锁住的。如果该对象提供的多个同步方法是针对不同业务。那么在一个业务处理时,其他不相关的方法也必须wait。
    2. 缩小同步代码块,只锁数据

      • 尽量减少不必要的进入同步块的逻辑代码。例,先判断条件,符合的再进入同步块之类的。
    3. 锁中尽量不要再包含锁

      • 例如:同步块中调用同步方法之类的情况。

        synchronized(A){
          B b=objArrayList.get(0);
          b.method();//这是一个同步方法
        }
        解决:
        {
          B b=null;
          synchronized(A){
            b=objArrayList.get(0);
          }
          b.method();
        }
        
    4. 将锁私有化,在内部管理锁

    5. 进行适当锁分解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值