- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Java8 新手,正在解决多个线程(~10)将值写入并发 HashMap 的问题。我有另一个专用线程,它读取并发 HashMap 中存在的所有值并返回它们(每 30 秒)。迭代 value() 方法的结果是否是获取结果而不会出现并发修改异常的推荐方法?
注意:我完全可以接受过时的数据
我查看了官方文档,其中写道:
检索操作通常不会阻塞,因此可能与更新操作重叠。检索反射(reflect)了最近完成的更新操作在其开始时的结果。对于诸如 putAll 和clear 之类的聚合操作,并发检索可能仅反射(reflect)某些条目的插入或删除。类似地,迭代器、拆分器和枚举返回反射(reflect)迭代器/枚举创建时或创建后某个时刻哈希表状态的元素。它们不会抛出 ConcurrentModificationException。
然而,values() 方法的文档说:
返回此映射中包含的值的 Collection View
下面的代码线程安全吗?
for (String name: myMap.values()) {
System.out.println("name": + name);
}
最佳答案
Is iterating over result of
values()
method the recommended way of fetching results without getting aConcurrentModificationException
?
是的。这是推荐的方法,您不会收到 ConcurrentModificationException
。
正如包级别 javadoc 所述:
<小时/>Most concurrent Collection implementations (including most Queues) also differ from the usual java.util conventions in that their Iterators and Spliterators provide weakly consistent rather than fast-fail traversal:
- they may proceed concurrently with other operations
- they will never throw
ConcurrentModificationException
- they are guaranteed to traverse elements as they existed upon construction exactly once, and may (but are not guaranteed to) reflect any modifications subsequent to construction.
Is the below code thread safe?
for (String name: myMap.values()) {
System.out.println("name": + name);
}
是的......有一些资格。
线程安全实际上意味着代码在多线程应用程序中按照其指定的行为工作。问题是您没有清楚地说出您期望代码实际执行的操作。
我们可以说的是:
同步
。这对于String
值来说是没有意义的,因为它们是不可变的。)关于java - ConcurrentHashMap的values()线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55983166/
我是一名优秀的程序员,十分优秀!