concurrentHashMap
hashtable 虽然是线程安全的,但是读写的效率太低了,而且会发生读写线程锁冲突。所以有了concurrentHashmap。
原理解析
把一个大的hashtable分解成16个小的hashtable,每个hashtable都有自己的独立锁,这就是分段锁的概念。
自定义ConcurrentHashMap
import java.util.Hashtable;
public class CustomConcurrentHashMap<K, V> {
private Hashtable<K, V>[] hashtables;
public CustomConcurrentHashMap() {
hashtables = new Hashtable[16];
for (int i = 0; i < 16; i++) {
hashtables[i] = new Hashtable<>();
}
}
public void put(K k, V v) {
// 先计算key存放的hashtable
int index = k.hashCode() % hashtables.length;
// 然后存放到 hashtable中
hashtables[index].put(k, v);
}
public V get(K k) {
// 先计算key存放的hashtable
int index = k.hashCode() % hashtables.length;
return hashtables[index].get(k);
}
public static void main(String[] args) {
CustomConcurrentHashMap<String, String> concurrentHashMap = new CustomConcurrentHashMap<>();
concurrentHashMap.put("hh", "hh");
concurrentHashMap.put("kkk", "vvv");
System.out.println(concurrentHashMap.get("hh"));
}
}