У меня есть основной поток, который создает HashMap, добавляет к нему несколько исполняемых объектов, а затем запускает каждый запускаемый (передавая HashMap каждому).Runnable удаляет свой объект с карты как раз перед завершением обработки.
Я хотел бы знать, есть ли какая-либо причина использовать ConcurrentHashMap (а не HashMap) в этом случае - единственная операцияrunnables выполняют на карте, чтобы удалить себя из нее.Есть ли соображения параллелизма, которые требуют использования ConcurrentHashMap в этом случае?
Основной поток
private final Map<Integer, Consumer> runnableMap = new HashMap<>();
Runnable runnable;
for (int i = 1; i <= NUM_RUNNABLES; i++) {
runnable = new Consumer(i, runnableMap);
runnableMap.put(i, runnable);
executionContext.execute(runnable);
}
Потребитель реализует Runnable
private final Integer consumerNumber;
private final Map<Integer, Consumer> runnableMap;
public Consumer(int consumerNumber, final Map<Integer, Consumer> runnableMap){
this.consumerNumber = consumerNumber;
this.runnableMap = runnableMap;
}
public void run() {
:::
// business logic
:::
// Below remove is the only operation this thread executes on the map
runnableMap.remove(consumerNumber);
}