通过Hashtable的Collections.synchronizedMap(Map m)

时间:2014-12-21 08:53:04

标签: java

我在Hashtable上查询了Collections.synchronizedMap(Map m)的用法。我们知道两者都将返回一个所有方法同步的容器,所以在任何情况下我都看不到性能提升。

那么为什么当Hashtable满足要求时我们有实用方法(Collections.synchronizedMap)。

使用代码进行澄清会很有帮助。

2 个答案:

答案 0 :(得分:4)

Hashtable和Collections.synchronized()主要由于历史原因而存在。从Java 5开始,在需要多个线程访问同一集合的大多数情况下,应该使用新的java.util.concurrent包。

当您收到一个非线程安全的集合(例如来自第三方代码)并且您希望在多个线程之间共享它时,Collections.synchronized()仍然很有用,而无需创建新的线程安全/并发集合。

请注意,在大多数情况下,您应该使用java.util.concurrent。同步集合将通过同步对集合的所有访问来保护其内部状态,但这在性能方面效率低下,并且无法解决数据一致性的较大问题。例如,ConcurrentHashMap提供了一个putIfAbsent()方法,可以确保该操作的原子性。

答案 1 :(得分:2)

Map的实施方式多于HashMap,您可能希望同步对其中任何一种的访问。