ConcurrentHashMap 和 Hashtable 的区别?
ConcurrentHashMap 结合了 HashMap 和 HashTable 二者的优势。
HashMap 没有考虑同步,hashtable 考虑了同步的问题。但是 hashtable 在每次同步执行时都要锁住整个结构。
ConcurrentHashMap 锁的方式是稍微细粒度的。 ConcurrentHashMap 将 hash 表分为 16 个桶(默认值),
诸如 get,put,remove 等常用操作只锁当前需要用到的桶。
ConcurrentHashMap 的具体实现?
该类包含两个静态内部类 Node 和 Segment;前者用来封装映射表的键值对,后者用来充当锁的角色;
Segment 是一种可重入的锁 ReentrantLock,每个 Segment 守护一个 Node 数组里得元素,
当对 Node 数组的数据进行修改时,必须首先获得对应的 Segment 锁。