我有一个场景,我想以线程安全的方式将 HashMap 复制到新的 HashMap 中。我想这样做是为了避免复制 map 时出现任何并发修改异常。
最佳答案
您需要确保在创建新映射时原始 HashMap 没有被修改。最直接的方法是在原始 map 上进行同步:
HashMap<K, V> original = ...
HashMap<K, V> copy;
synchronized (original) {
copy = new HashMap<>(original);
}
如果所有可能修改original
的代码在同一个对象上同步(original
本身,在我的示例代码中,虽然它可以是任何共享对象)。如果 original
是 Collections.synchronizedMap()
返回的对象,那么您必须在 original
上进行同步以实现所有同步正常工作;由于同步映射内部的操作方式,使用另一个锁对象将不起作用。
关于java - 复制 HashMap 的线程安全方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48777744/