1. 程式人生 > >ConcurrentHashMap和Hashtable的區別

ConcurrentHashMap和Hashtable的區別

為什麼我們需要ConcurrentHashMap和CopyOnWriteArrayList

同步的集合類(Hashtable和Vector),同步的封裝類(使用Collections.synchronizedMap()方法和Collections.synchronizedList()方法返回的物件)可以創建出執行緒安全的Map和List。但是有些因素使得它們不適合高併發的系統。它們僅有單個鎖,對整個集合加鎖,以及為了防止ConcurrentModificationException異常經常要在迭代的時候要將集合鎖定一段時間,這些特性對可擴充套件性來說都是障礙。

ConcurrentHashMap和CopyOnWriteArrayList保留了執行緒安全的同時,也提供了更高的併發性。ConcurrentHashMap和CopyOnWriteArrayList並不是處處都需要用,大部分時候你只需要用到HashMap和ArrayList,它們用於應對一些普通的情況。

ConcurrentHashMap和Hashtable的區別

Hashtable和ConcurrentHashMap有什麼分別呢?它們都可以用於多執行緒的環境,但是當Hashtable的大小增加到一定的時候,效能會急劇下降,因為迭代時需要被鎖定很長的時間。因為ConcurrentHashMap引入了分割(segmentation),不論它變得多麼大,僅僅需要鎖定map的某個部分,而其它的執行緒不需要等到迭代完成才能訪問map。簡而言之,在迭代的過程中,ConcurrentHashMap僅僅鎖定map的某個部分,而Hashtable則會鎖定整個map。