理解高併發(7).編程過程中鎖的優化技巧

  • 分拆(段)鎖
把一個集合看分成若干partition, 每個partiton一把鎖。ConcurrentHashMap就是分了
16個區域,這16個區域之間是可以併發的。
mysql innode的行級鎖運用的就是該思想。

  • 儘量減小鎖的控制範圍
範圍越大,運行時間越長

  • 儘量減小鎖的使用時間
運行時間越長,其它線程等待的時間就越長

  • 分離鎖
獨立不相關的數據用不同的鎖,比如一個對象有很多字段,這些字段是獨立的,而不是組合起來表示一個邏輯數據(比如firstName, lastName,必須組合起來表示一個名字),那麼可以每個字段各自對應不同的鎖,而不是鎖整個對象
  • 讀寫鎖
讀多寫少的場景非常適用, 能夠保持最終一致性。copyOnWriteArray 主要解決讀、遍歷和寫之間的衝突,對數組寫(更新、增加)的時候,copy一個新數組做,這樣iterator永遠不會有ConcurrentModification問題,讀也永遠都是讀得完結狀態下的值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章