集合類是Java API的核心,可是我以爲要用好它們是一種藝術。我總結了一些我的的經驗,譬如使用ArrayList可以提升性能,而再也不須要過期的Vector了,等 等。JDK 1.5引入了一些好用的併發集合類,它們對於大型的、要求低延遲的電子商務系統來講很是的有用。這篇文章中將會看看ConcurrentHashMap和 Hashtable之間的區別。html
這篇文章是HashMap的工做原理以及HashMap和Hashtable的區別的後續。若是你已經讀過的話,那麼我相信你讀完本篇以後會有所收穫。安全
同步的集合類(Hashtable和Vector),同步的封裝類(使用Collections.synchronizedMap()方法和 Collections.synchronizedList()方法返回的對象)能夠建立出線程安全的Map和List。可是有些因素使得它們不適合高並 發的系統。它們僅有單個鎖,對整個集合加鎖,以及爲了防止ConcurrentModificationException異常常常要在迭代的時候要將集 合鎖定一段時間,這些特性對可擴展性來講都是障礙。多線程
ConcurrentHashMap和CopyOnWriteArrayList保留了線程安全的同時,也提供了更高的併發性。 ConcurrentHashMap和CopyOnWriteArrayList並非到處都須要用,大部分時候你只須要用到HashMap和 ArrayList,它們用於應對一些普通的狀況。併發
Hashtable和ConcurrentHashMap有什麼分別呢?它們均可以用於多線程的環境,可是當Hashtable的大小增長到必定的 時候,性能會急劇降低,由於迭代時須要被鎖定很長的時間。由於ConcurrentHashMap引入了分割(segmentation),不論它變得多 麼大,僅僅須要鎖定map的某個部分,而其它的線程不須要等到迭代完成才能訪問map。簡而言之,在迭代的過程當中,ConcurrentHashMap僅 僅鎖定map的某個部分,而Hashtable則會鎖定整個map。性能