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