CocurrentHashMap和Hashtable的區別


集合類是Java API的核心,但是我覺得要用好它們是一種藝術。我總結了一些個人的經驗,譬如使用ArrayList能夠提高性能,而不再需要過時的Vector了,等等。JDK 1.5引入了一些好用的並發集合類,它們對於大型的、要求低延遲的電子商務系統來說非常的有用。這篇文章中將會看看ConcurrentHashMap和Hashtable之間的區別。

這篇文章是HashMap的工作原理以及HashMap和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。

 

文章轉自:http://blog.csdn.net/kobejayandy/article/details/16834311


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM