ConcurrentHashMap

    • ConcurrentHashMap
      • jdk1.7
        • 实现原理
          • 数据结构
            • segment数组+hashEntry数组+链表
            • 而每一个 Segment 是一个类似于 HashMap 的结构,所以每一个 HashMap 的内部可以进行扩容
            • 但是 Segment 的个数一旦初始化就不能改变,默认 Segment 的个数是 16 个,你也可以认为 ConcurrentHashMap 默认支持最多 16 个线程并发。
          • 线程安全 分段锁
            • 分段锁 以segment为基本单位加ReentrantLock锁
            • segment数组下标初始化使用 自旋+CAS 保证线程安全
            • segment的put方法使用 自旋锁+ReentrantLock 保证线程安全
      • jdk1.8
        • 实现原理
          • 数据结构
            • Node数组+链表/红黑树
            • 数据结构和hashmap类似
          • 线程安全
            • 分段锁 以Node对象 为基本单元加锁
            • Node数组和Node对象初始化 使用 volatile + CAS 保证线程安全
            • Node的增删改查方法 使用 synchronized 保证线程安全
      • https://javaguide.cn/java/collection/concurrent-hash-map-source-code.html#_1-concurrenthashmap-1-7

posted @ 2025-04-21 17:04  一点点征服  阅读(13)  评论(0)    收藏  举报