集合類是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
新聞熱點
疑難解答