锁优化

无锁编程

  • CAS:先比较后设置,容易产生ABA问题,多线程下自旋浪费资源。
    jdk中提供原子操作类·AtomicBoolean AtomicInteger AtomicLong
    jdk1.8 优化:LongAdder 在CAS的基础上额外增加了分段锁
  • volatile:共享内存变量,强制刷新变量变更到内存。
  • threadlocal:线程享有数据副本,单独操作。会占用大量内存。

有锁编程

  • 缩小使用范围
    对于synchronized关键字来说,缩小锁的影响范围,在业务允许下代码块优于方法,对于非必要加锁的代码尽量排除。但是对于大量循环来说需要粗化锁减少获取锁的次数。
  • 缩小粒度
    对于synchronized关键字来说,对象锁的使用粒度可以根据业务细分,不同的业务竞争不同对象锁。如:增加/更新操作可以是两个对象锁。
  • 分段锁
    jdk中广泛使用,如ConcurrentHashMap 分段锁,jdk1.8后的CAS优化
  • 读写分离
    对于读多写少的业务可以采用读写分离。如jdk提供的ReentrantReadWriteLock 读为共享锁,写为独占锁。

除了分段处理有其他的优化方式么?有木有大牛分享一下。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值