java - 复制 HashMap 的线程安全方法

标签 java

我有一个场景,我想以线程安全的方式将 HashMap 复制到新的 HashMap 中。我想这样做是为了避免复制 map 时出现任何并发修改异常。

最佳答案

您需要确保在创建新映射时原始 HashMap 没有被修改。最直接的方法是在原始 map 上进行同步:

HashMap<K, V> original = ...

HashMap<K, V> copy;
synchronized (original) {
    copy = new HashMap<>(original);
}

如果所有可能修改original的代码在同一个对象上同步(original本身,在我的示例代码中,虽然它可以是任何共享对象)。如果 originalCollections.synchronizedMap() 返回的对象,那么您必须original 上进行同步以实现所有同步正常工作;由于同步映射内部的操作方式,使用另一个锁对象将不起作用。

关于java - 复制 HashMap 的线程安全方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48777744/

相关文章:

java - Android Studio模拟器:流程结束,退出代码为-1073741515(0xC0000135)

java - 如何使用 long 而不是 int 可以防止以下方法 - Effective Java

java - 组位置始终返回 0

Java代码1+问题

java - 动态创建对象并将其添加到列表JavaFX

java - Spring - 以编程方式将接口(interface)绑定(bind)到实现类

java - 多个单选按钮被选中

java - 显示多个字符串项目Java

Java计算器因输入括号而崩溃

java - 如何使用 REST 复制 Documentum 7.x 中的对象