Я имитирую чтение базы данных, создавая поток до 1000000, а затем обрабатываю поток параллельно< /p>
Код: Выделить всё
final Map charCountMap = new ConcurrentHashMap();
for (char c = 'a'; c i).limit(1000000).parallel() //mock database stream
.forEach(i-> RandomStringUtils.randomAlphanumeric(500)
.toLowerCase().chars().mapToObj(c -> Character.valueOf((char) c)).filter(c -> c >= 97 && c charCountMap.compute(c, (k, v) -> v + 1))); //update ConcurrentHashMap
long end = System.currentTimeMillis();
System.out.println("Parallel Stream time spent :" + (end - start));
System.out.println("Serial Stream"); start = System.currentTimeMillis();
Stream.iterate(0, i -> i).limit(1000000) //mock database stream
.forEach(i-> RandomStringUtils.randomAlphanumeric(500)
.toLowerCase().chars().mapToObj(c -> Character.valueOf((char) c)).filter(c -> c >= 97 && c charCountMap.compute(c, (k, v) -> v + 1)));
end = System.currentTimeMillis();
System.out.println("Serial Stream time spent :" + (end - start));
Я подозревал, что это произошло из-за обновления ConcurrentHashMap. Но когда я удалил его и изменил пустую функцию, все еще существует значительный разрыв в производительности.
Что-то не так в вызове макета моей базы данных или в том, как я использую параллельный поток?
Подробнее здесь: https://stackoverflow.com/questions/723 ... stringutil