我正在尝试增加 ConcurrentHashMap 的值

I'm trying to increment value for ConcurrentHashMap

全部采用多线程编程,不采用 Guava。 我的问题和一样,但是我想不用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 computeIfPresent() 和 putIfAbsent() 的 8 个功能,因为它们可以处理并发。 ConcurrentMap 处理多线程环境中 key/value 操作的内存一致性。

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

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

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