gpt4 book ai didi

java - 调用 values() 时需要同步一个并发的 HashMap 吗?

转载 作者:行者123 更新时间:2023-11-30 09:35:07 25 4
gpt4 key购买 nike

在下面的代码中:

private final Map<A, B> entriesMap = Collections
.synchronizedMap(new HashMap<A, B>());

// ...

List<B> entries = new ArrayList<>(this.entriesMap.values());

如果entriesMap正在被其他方法中的多个线程访问/修改,是否有必要对entriesMap进行同步?换句话说:

List<B> entries;

synchronize (this.entriesMap) {
entries = new ArrayList<>(this.entriesMap.values());
}

如果我是正确的,values() 不是原子操作,不像 put()get(),对吧?

谢谢!

最佳答案

问题是,即使 values() 本身是原子的,迭代 的行为也不是。 ArrayList 构造函数无法以原子方式获取值的副本 - 如果另一个线程在复制它们时更改映射,则迭代器将失效。

关于java - 调用 values() 时需要同步一个并发的 HashMap 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11535543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com