ConcurrentHashMap原理
HashTable与HashMap的区别
-
HashMap线程不安全
-
HashTable线程安全
HashTable集合有哪些缺陷
- 加了synchronized,多线程操作效率低
![](/Users/pxw/Desktop/截屏2022-10-26 下午9.44.09.png)
ConcurrentHashMap1.7 底层实现
数据结构:数组+Segments分段锁+HashEntry链表实现
锁的实现:Lock锁+CAS乐观锁+UNSAFE类
扩容实现:支持多个Segment同时扩容
![](/Users/pxw/Desktop/截屏2022-10-26 下午9.59.16.png)
纯手写
class hashtable17{
private Hashtable<String,Object>[] bigHashTable; #大数组
public hashtable17() {
Hashtable<String, Object>[]smartHashTables = new Hashtable[16];
for (int i = 0; i < 16; i++) {
smartHashTables[i] = new Hashtable<String,Object>(); #16个小数组
}
this.bigHashTable = smartHashTables;
}
public void put(String key,Object value){
int index = key.hashCode()%bigHashTable.length;
bigHashTable[index].put(key,value);
}
public Object get(String key){
int index = key.hashCode()%bigHashTable.length;
return bigHashTable[index].get(key);
}
}
ConcurrentHashMap1.8 底层实现
数据结构:Node数组
锁的实现:
- index没有发生使用cas
- index发生冲突使用synchronized
扩容机制:
- 支持并发扩容