HashMap,Hashtable和ConcurrentHash

2017-01-16  本文已影响59人  Leocat

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的区别

上一篇 下一篇

猜你喜欢

热点阅读