如何构建多concurrenthashmap?

r1wp621o  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(405)

Guava图书馆很有用 MultuMap 替换 Map<Object, Collection> 以避免空检查。
我找不到模拟的 MultiMap 为了 ConcurrentHashMap .
它存在吗?
Multimaps.forMap(new ConcurrentHashMap<Object, Object>()); 对的?

p、 s。

初始化:

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

第一个线程:

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

第二个线程:

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

现在这个代码导致 ConcurrentModificationexception .

9bfwbjaz

9bfwbjaz1#

如果我没记错的话 HashMultimap.create(); 然后 ImmutableSetMultimap.Builder .

lyr7nygr

lyr7nygr2#

你可以用
初始化:

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

第一个线程:

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

第二个线程:

  1. for (ComplexCalcStrategy strategy : strategies.getOrDefault(optionId, Collections.emptySet())) {
  2. updateMarketData(strategy.getStrategy(), mktDataChange);
  3. }
展开查看全部

相关问题