炸炸熊 - Day2

64 阅读1分钟

基础

CocurrentHashMap

1.7

采用分段锁技术,其中 Segment 继承于 ReentrantLock。支持最大的并发数与 Segment 大小相同。当线程占用锁访问 Segment 时不影响其他 Segment 。

  • Get 非常高效,通过 volatile 保证内存的可见性,每次获取都是最新的值,不需要加锁。
  • Put
    1. 先通过 key 定位到 Segment
    2. 尝试获取锁,如果锁被占用,会自旋获取锁
    3. 获取到锁后,将值设置到 table 对应的 key 中

1.8

  • 采用 CAS + synchronized 保证并发的安全性

  • 利用红黑树提高查询效率

  • synchronized 取代 ReentrantLock。synchronized 性能提升很大

LeetCode