[英]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.