我正在尝试增加ConcurrentHashMap的值

问题描述 投票:0回答:2

全部采用多线程编程,无需番石榴。我的问题与this one相同,但我想在没有break;的情况下解决它。我已经阅读过这个主题,但仍然没有解决问题,我刚出生多线程,所以也许解决方案就在这里,但我看不到它。

我正试着数字。如果这个词已经满足,只需增加值,如果不是,只需将新节点放入带有密钥wordvalue 1的地图中。

这是我的代码,这是错误的。我想避免任何循环。

String word = m.group();
if(wordMap.putIfAbsent(word, 1) == null){
    Integer old;
    while (!wordMap.replace(word, old = wordMap.get(word), old + 1));
}
java multithreading thread-safety java.util.concurrent concurrenthashmap
2个回答
2
投票

合并方法是您最有可能寻找的方法:

String word = m.group();
wordMap.merge(word, 1, Integer::sum);

1
投票

您之前引用的link中提供的解决方案已经具有最佳解决方案。

您可以使用computeIfPresent()和putIfAbsent()的Java 8功能,因为它们可以处理并发。 ConcurrentMap处理多线程环境中键/值操作的内存一致性。

根据documentation,给定密钥的更新操作与报告更新值的该密钥的任何(非空)检索具有发生之前的关系。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.