java - 我正在尝试增加 ConcurrentHashMap 的值

标签 java multithreading thread-safety java.util.concurrent concurrenthashmap

全部使用多线程编程并且没有Guava。 我的问题和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));
}

最佳答案

merge-Method 是您最有可能寻找的:

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

关于java - 我正在尝试增加 ConcurrentHashMap 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55634897/

相关文章:

java - 通过 JMS/JNDI 连接到 WebSphere MQ 时出现 SSLHandshakeException

c++ - 多线程暴力破解密码算法

java - 分析BlockingQueue使用示例

Swift - 检查弱变量是否为零或不是线程安全的?

ios - 如何将代码块分派(dispatch)到 iOS 中的同一个线程?

java - 从 ViewPager Fragment 监听 DialogFragment dismiss 事件

java - 使用 JPA/Spring 的(通用)DDD 存储库的方法 : does it look wrong?

java - 非平凡的推土机映射

c++ - 来自主线程的信号未到达第二线程 Qt 5 中的插槽

java - 使非同步数据结构线程安全的方法