concurrenthashmap線程安全的原理?
在ConcurrentHashMap沒有出現以前,jdk使用hashtable來實現線程安全,但是hashtable是將整個hash表鎖住,所以效率很低下。
ConcurrentHashMap將數據分別放到多個Segment中,默認16個,每一個Segment中又包含了多個HashEntry列表數組,
對于一個key,需要經過三次hash操作,才能最終定位這個元素的位置,這三次hash分別為:
對于一個key,先進行一次hash操作,得到hash值h1,也即h1 = hash1(key);
將得到的h1的高幾位進行第二次hash,得到hash值h2,也即h2 = hash2(h1高幾位),通過h2能夠確定