全部采用多线程编程,无需番石榴。我的问题与this one相同,但我想在没有break;
的情况下解决它。我已经阅读过这个主题,但仍然没有解决问题,我刚出生多线程,所以也许解决方案就在这里,但我看不到它。
我正试着数字。如果这个词已经满足,只需增加值,如果不是,只需将新节点放入带有密钥word
和value
1的地图中。
这是我的代码,这是错误的。我想避免任何循环。
String word = m.group();
if(wordMap.putIfAbsent(word, 1) == null){
Integer old;
while (!wordMap.replace(word, old = wordMap.get(word), old + 1));
}
合并方法是您最有可能寻找的方法:
String word = m.group();
wordMap.merge(word, 1, Integer::sum);
您之前引用的link中提供的解决方案已经具有最佳解决方案。
您可以使用computeIfPresent()和putIfAbsent()的Java 8功能,因为它们可以处理并发。 ConcurrentMap处理多线程环境中键/值操作的内存一致性。
根据documentation,给定密钥的更新操作与报告更新值的该密钥的任何(非空)检索具有发生之前的关系。