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

  • 分拆(段)锁
把一个集合看分成若干partition, 每个partiton一把锁。ConcurrentHashMap就是分了
16个区域,这16个区域之间是可以并发的。
mysql innode的行级锁运用的就是该思想。

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

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

  • 分离锁
独立不相关的数据用不同的锁,比如一个对象有很多字段,这些字段是独立的,而不是组合起来表示一个逻辑数据(比如firstName, lastName,必须组合起来表示一个名字),那么可以每个字段各自对应不同的锁,而不是锁整个对象
  • 读写锁
读多写少的场景非常适用, 能够保持最终一致性。copyOnWriteArray 主要解决读、遍历和写之间的冲突,对数组写(更新、增加)的时候,copy一个新数组做,这样iterator永远不会有ConcurrentModification问题,读也永远都是读得完结状态下的值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章