【发布时间】:2012-02-11 03:19:36
【问题描述】:
据我所知,java.util.Hashtable 同步java.util.Map 接口中的每个方法,而Collections.synchronizedMap(hash_map) 返回一个包装对象,其中包含将调用委托给实际hash_map 的同步方法(如果我错了,请纠正我)。
我有两个问题:
同步每个方法和拥有一个包装类有什么区别?有哪些场景可以选择其中一个?
当我们执行
Collections.synchronizedMap(hash_table)时会发生什么?这是否等同于简单地使用普通的java.util.Hashtable?
【问题讨论】:
-
这不是 that 问题的重复。这是将 HashMap(或 HashTable)上的同步包装器与 HashTable 进行比较。
-
我很想知道性能上是否存在差异,目前的答案都没有解决。通过 Map 类型的变量调用
Collections.synchronizedMap的方法意味着在实现之前有 2 个接口虚拟调用,而使用 Hashtable,最多有 1 个虚拟调用,您可以直接将变量声明为 Hashtable 类型,并使用 0 个虚拟呼叫来完成。但也许 HashMap 在其他方面有所不同,使其整体速度更快。
标签: java collections synchronization hashmap hashtable