Tha*_*Guy 3 java concurrenthashmap java-stream
我有一个 concurrentHashMap 实例,一些线程向其中添加了条目。这些值是整数。
同时,其他线程希望检索映射中所有值的总和。我希望这些线程看到一致的值。但是,它们不必总是看到最新的值。
以下代码线程安全吗?
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class MyClass {
private Map<Integer, Integer> values = new ConcurrentHashMap<>();
public void addValue(Integer key, int value){
values.put(key, value);
}
public long sumOfValues(){
return values
.values()
.stream()
.mapToInt(Integer::intValue)
.sum();
}
}
Run Code Online (Sandbox Code Playgroud)
求和运算会在一组一致的值上计算吗?
当 sum 运算发生时,对 put() 的调用会被阻塞吗?
当然我可以自己同步访问,甚至可以拆分读写锁以允许并发读访问和同步写访问,但是我很好奇在使用 concurrentHashMap 作为集合实现时是否有必要。
该文件说,有关ConcurrentHashMap的keySet()和entrySet():视图的迭代器和spliterators是弱一致。
弱一致特征为
所以...
以下代码线程安全吗?
是的,狭义上没有 ConcurrentModificationException 或 HashMap 的内部不一致。
求和运算会在一组一致的值上计算吗?
在弱一致集上
当 sum 运算发生时,对 put() 的调用会被阻塞吗?
不
| 归档时间: |
|
| 查看次数: |
515 次 |
| 最近记录: |