减少锁的竞争

1)通过使用synchronized代码块儿代替在方法上添加synchronized来保护共享状态的方法,减小锁的范围,减少线程持有锁的时间。

2)锁的分解,例如一个类有两个共享状态,一个是人,一个是钱,分别提供两个锁,分别对应这两个共享状态,那么即可减少持有锁的频率。

3)锁的分解的进一步扩展那就是锁的分段,例如共享状态人是使用HashTable保存那么程序性能因为经常持有锁二成为性能瓶颈,使用ConcurrenthHashMap来代替Hashtable,因为ConcurrentHashMap使用的是默认16个锁类分别管理整个map的1/16的元素,那么每个线程在写入程序的时候,不需要持有整个map的锁,减少了持有锁的频率。

4)避免热点域,例如ConcurrentHashMap的size,用户保存集合的元素个数,单数看似可以O(1)操作的直接获取的操作,却因为是没有个设计修改元素个数的操作都会访问这个属性成为并发的另一个伸缩性问题,ConcurrrentHashMap通过每一个Segment维护一个count,这样在需要的时候再汇总,避免频繁访问size的问题。

5)使用ReentranReadWriteLock。

6)合理使用原理变量类。

7)合理使用volatile。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值