[英]How to build Multi ConcurrentHashMap?
guava library has useful MultuMap
to replace Map<Object, Collection>
to avoid null checks. guava库具有有用的
MultuMap
来替换Map<Object, Collection>
以避免空检查。
I cannot find analog MultiMap
for ConcurrentHashMap
. 我找不到
ConcurrentHashMap
模拟MultiMap
。
Does it exist ? 是否存在?
Does Multimaps.forMap(new ConcurrentHashMap<Object, Object>());
是否做
Multimaps.forMap(new ConcurrentHashMap<Object, Object>());
correct? 正确?
initialization: 初始化:
private Multimap<Object, ComplexCalcStrategy> strategies = HashMultimap.<Object, ComplexCalcStrategy>create();
first thread: 第一个线程:
for (Integer optionId : strategy.getOptions()) {
strategies.put(optionId, strategy);
}
second thread: 第二个线程:
Collection<ComplexCalcStrategy> strategiesThatNeedUpdating = strategies.get(mktDataChange.getOptionId());
for (ComplexCalcStrategy strategy : strategiesThatNeedUpdating) {
updateMarketData(strategy.getStrategy(), mktDataChange);
}
Now this code leads to ConcurrentModificationexception
. 现在,此代码导致
ConcurrentModificationexception
。
If i remembar correctly HashMultimap.create();
如果我正确地正确
HashMultimap.create();
and then ImmutableSetMultimap.Builder
. 然后是
ImmutableSetMultimap.Builder
。
You could replace those sections with 您可以将这些部分替换为
initialization: 初始化:
private final Map<Integer, Set<ComplexCalcStrategy>> strategies = new ConcurrentHashMap<>();
first thread: 第一个线程:
for (Integer optionId : strategy.getOptions()) {
strategies.computeIfAbsent(optionId, k -> Collections.newSetFromMap(new ConcurrentHashMap<>()))
.add(strategy);
}
second thread: 第二个线程:
for (ComplexCalcStrategy strategy : strategies.getOrDefault(optionId, Collections.emptySet())) {
updateMarketData(strategy.getStrategy(), mktDataChange);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.