1. 程式人生 > >HashMap,,ConcurrentHashMap------------------淺談!!

HashMap,,ConcurrentHashMap------------------淺談!!

存儲 方法 大量 hash 寫入 重點 快的 相對 同時

沒啥讀到的簡介,這個文章純粹是學習Hash的時候的筆記罷了!!!

之前一直覺得既然HashMap能用為啥還要出現HashTable,TreeMap,ConcurrentHashMap等等這些鏈表來存儲數據。

hashMap 寫入慢,讀取快。因為hashMap全程在寫入的時候要考慮到值是否存在 還要涉及到table擴容,所以寫入的時候由於步驟相對較多,導入寫入較慢,但讀取的時候只需要根據key來查找就好,所以讀取非常塊。

但是因為hashMap的方法都沒有考慮線程安全 這也是他的有點,由於不需要考慮線程 所以就不要加入鎖機制。沒有等待,所以在單線程中hashMap的讀取是很快的。但也是缺點,由於沒有考慮並發,所以當同時對hashMap

寫入的時候,且需要擴容鏈表的時候就會出現並發。是個頭疼的問題。

ConcurrentHashMap 不但讀取塊,而且還能保證線程安全,很厲害啊。因為concurrentHashMap中用到了大量的線程安全關鍵字 而且還繼承了ReentrantLock類,重點是基於線程安全的情況下也能做到讀取的速度非常快,是因為

concurrentHashMap中采用Segment(段)的技術,每個segment都有自己對應的鎖 而concurrentHashMap中的segment是個數組,每個segment都是一個鏈表,當針對一個segment操作時 是不影響其他的segment

操作的,而且每個segment都有自己的鎖。所以在一個segment內操作可以保證線程安全,而且由於segment是個數組,可以同時並行的操作多個segment內的數據 這點又保證了讀取的數度不會因為線程安全的原因影響了!!!!

HashMap,,ConcurrentHashMap------------------淺談!!