ConcurrentHashMap和Collections.synchronizedMap(Map)有什么区别?

问题:

我有一个由几个线程同时修改的地图。
Java API中似乎有三个不同的同步Map实现:

  •  Hashtable
  •  Collections.synchronizedMap(Map)
  •  ConcurrentHashMap

根据我的理解,Hashtable是一个旧的实现(扩展了过时的Dictionary类),它稍后被修改为适合Map接口。虽然is同步,但似乎有严重的scalability issues,并且对新项目不鼓励。
但是另外两个呢?由Collections.synchronizedMap(Map)返回的地图与ConcurrentHashMap之间有什么区别?哪一种适合哪种情况?

回答:

根据您的需要,使用ConcurrentHashMap。它允许从多个线程并行修改Map,而不需要阻止它们。 Collections.synchronizedMap(map)创建一个阻止地图,这将降低性能,尽管确保一致性(如果正确使用)。
如果需要确保数据一致性,请使用第二个选项,并且每个线程需要有一个地图的最新视图。如果性能至关重要,则使用第一个,并且每个线程只会将数据插入到地图中,读取次数不太频繁。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: What’s the difference between ConcurrentHashMap and Collections.synchronizedMap(Map)?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

73 + = 75