繁体   English   中英

如何建立Multi ConcurrentHashMap?

[英]How to build Multi ConcurrentHashMap?

guava库具有有用的MultuMap来替换Map<Object, Collection>以避免空检查。

我找不到ConcurrentHashMap模拟MultiMap

是否存在?

是否做Multimaps.forMap(new ConcurrentHashMap<Object, Object>()); 正确?

聚苯乙烯

初始化:

private Multimap<Object, ComplexCalcStrategy> strategies = HashMultimap.<Object, ComplexCalcStrategy>create();

第一个线程:

for (Integer optionId : strategy.getOptions()) {
            strategies.put(optionId, strategy);
  }

第二个线程:

Collection<ComplexCalcStrategy> strategiesThatNeedUpdating = strategies.get(mktDataChange.getOptionId());
for (ComplexCalcStrategy strategy : strategiesThatNeedUpdating) { 
     updateMarketData(strategy.getStrategy(), mktDataChange);
}

现在,此代码导致ConcurrentModificationexception

如果我正确地正确HashMultimap.create(); 然后是ImmutableSetMultimap.Builder

您可以将这些部分替换为

初始化:

private final Map<Integer, Set<ComplexCalcStrategy>> strategies = new ConcurrentHashMap<>();

第一个线程:

for (Integer optionId : strategy.getOptions()) {
    strategies.computeIfAbsent(optionId, k -> Collections.newSetFromMap(new ConcurrentHashMap<>()))
              .add(strategy);
}

第二个线程:

for (ComplexCalcStrategy strategy : strategies.getOrDefault(optionId, Collections.emptySet())) { 
     updateMarketData(strategy.getStrategy(), mktDataChange);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM