我是 Java8 的新手,正在解决多个线程(~10)正在将值写入并发哈希映射的问题。我有另一个专用线程,它读取并发哈希映射中存在的所有值并返回它们(每 30 秒)。迭代 values() 方法的结果是在不获取并发修改异常的情况下获取结果的推荐方法吗?
注意:我完全可以获取过时的数据
我查看了官方文档,其中说:
检索操作一般不会阻塞,因此可能与更新操作重叠。检索反映了最近完成的更新操作在其开始时保持的结果。对于 putAll 和 clear 等聚合操作,并发检索可能仅反映插入或删除某些条目。类似地,迭代器、拆分器和枚举返回反映哈希表在创建迭代器/枚举时或之后的某个时间点的状态的元素。它们不会抛出 ConcurrentModificationException。
但是 values() 方法的文档说:
返回此映射中包含的值的集合视图
下面的代码线程安全吗?
for (String name: myMap.values()) {
System.out.println("name": + name);
}