理解高并发(7).编程过程中锁的优化技巧

来源:互联网 发布:知乎日报 启动图 编辑:程序博客网 时间:2024/06/06 17:20
  • 分拆(段)锁
把一个集合看分成若干partition, 每个partiton一把锁。ConcurrentHashMap就是分了
16个区域,这16个区域之间是可以并发的。
mysql innode的行级锁运用的就是该思想。

  • 尽量减小锁的控制范围
范围越大,运行时间越长

  • 尽量减小锁的使用时间
运行时间越长,其它线程等待的时间就越长

  • 分离锁
独立不相关的数据用不同的锁,比如一个对象有很多字段,这些字段是独立的,而不是组合起来表示一个逻辑数据(比如firstName, lastName,必须组合起来表示一个名字),那么可以每个字段各自对应不同的锁,而不是锁整个对象
  • 读写锁
读多写少的场景非常适用, 能够保持最终一致性。copyOnWriteArray 主要解决读、遍历和写之间的冲突,对数组写(更新、增加)的时候,copy一个新数组做,这样iterator永远不会有ConcurrentModification问题,读也永远都是读得完结状态下的值
原创粉丝点击