相关疑难解决方法(0)

Hashtable和Collections.synchronizedMap(HashMap)之间的区别

据我所知,java.util.Hashtable同步java.util.Map接口中的每个方法,同时Collections.synchronizedMap(hash_map)返回一个包装器对象,其中包含将调用委托给实际的同步方法hash_map(如果我错了,请纠正我).

我有两个问题:

  1. 它与同步每个方法和包装类有什么区别?有哪些方案可以选择其中一种?

  2. 我们这样做会发生什么Collections.synchronizedMap(hash_table)?这是否等于简单地使用正常java.util.Hashtable

java collections synchronization hashtable hashmap

46
推荐指数
2
解决办法
2万
查看次数

有什么理由使用同步 HashMap 而不是 ConcurrentHashMap 吗?

在多线程应用程序中,是否存在需要时使用带有同步功能的 HashMap 比使用 ConcurrentHashMap 更好的场景?

具体来说,我正在考虑一个地图初始化如下的应用程序:

Map<String,String> map = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

每个线程访问映射只是为了更新它并立即将其转换为字符串,因此唯一的同步块是:

synchronized(map) {
    map.put(key,value);
    StringBuilder sb = new StringBuilder();
    for (String k: map.keySet())
        sb.append("("+k+","+map.get(k)+")");
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,将初始化更改为:会更安全吗?

Map<String,String> map = new ConcurrentHashMap<>();
Run Code Online (Sandbox Code Playgroud)

并删除“同步”?

java concurrency thread-safety

4
推荐指数
1
解决办法
1837
查看次数