HashMap,Hashtable和ConcurrentHashMap

HashMap,Hashtable和ConcurrentHashMap

HashMap和Hashtable的區別

主要有三方面:線程安全性,同步以及速度

  1. HashMap可以接受null的鍵和null的值,而Hashtable不行
  2. HashMap是非synchronized,而Hashtable是synchronized,所以Hashtable是線程安全的,多個線程可以共享同一個Hashtable,而HashMap不行。可以使用Collections.synchronizedMap(Map<K,V> m)方法來從HashMap中獲取線程安全的Map。
  3. 因為Hashtable是線程安全的,需要進行同步,所以單線程環境下速度比HashMap慢。

ConcurrentHashMap和Hashtable的區別

  1. Java5引入了ConcurrentHashMap
  2. Hashtable和ConcurrentHashMap都可以用于多線程環境,但是和Collections.synchronizedMap方法獲取的
    線程安全的Map一樣,Hashtable僅有單個鎖,對整個集合加鎖。所以當Hashtable的大小增到一定程度時候,性能
    會急劇下降,因為迭代時需要整個集合需要被鎖定更長的時間。
  3. ConcurrentHashMap中引入分割(segmentation),無論它變得多大,僅僅需要鎖定map的某個部分,而其它的線程不需要
    等到迭代完成才能訪問map。

ConcurrentHashMap僅僅鎖定map的某個部分,而Hashtable則會鎖定整個map。

HashMap和Hashtable的區別

ConurrentHashMap和Hashtable的區別

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容