У меня есть список из 637200 роллидов, которые я использую для циклического перебора, получения их из таблицы DynamodB и попытки сохранить его в hashmap.Я пытаюсь добавить это в пользовательский ForkJoinPool
около 8 Threads
HashMap<String, List<Details>> studentRecord = new HashMap<>();
rollIds.parallelStream(id -> {
Details d = fetchDataStudentDao.getStudentById(id);
studentRecord.put(id, d);
});
Примечание: я не могу контролировать getStudentById
, как это происходит из какого-то другого пакета, который яне должен изменяться.
У меня проблемы с использованием параллельных потоков, потому что отображение не происходит правильно.Ученик с одним id
сопоставляется с некоторыми другими данными ученика.
Проверяя больше этого, я обнаружил, что HashMap
не является поточно-ориентированным и не должен использоваться вместо этого, мы используем concurrentHashMap
или используем forEach.
Если я использую forEach, получение результата занимает более 4 часов.но если я использую parallelStreams, это займет около 3 часов немного быстрее, чем forEach, но результат будет неправильным.
Проблемы, с которыми я сталкиваюсь, какое решение мне следует использовать?Я не уверен, как использовать ConcurrentHashmap
в этом случае, и будет ли он быстрее?
Или каким-либо другим способом это можно сделать быстрее, требуя некоторой помощи и руководства.