开发者社区> 问答> 正文

Java流会以一致的方式对ConcurrentHashMap的值求和吗?

我有一个并发HashMap实例,一些线程向其中添加条目。这些值是整数。

同时,其他线程希望检索映射中所有值的总和。我希望这些线程看到一致的值。但是,不必一定总是让他们看到最新的值。

以下代码线程安全吗?

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();
    }
}

求和运算是否将根据一组一致的值进行计算?

当求和运算发生时,是否会阻止对put()的调用?

当然,我可以自己同步访问,甚至可以拆分读写锁,以允许并发读取访问和同步写访问,但是我很好奇在将并发HashMap用作集合实现时是否必要。

展开
收起
垚tutu 2019-12-12 09:15:20 580 0
0 条回答
写回答
取消 提交回答
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载