Я явно не обсуждаю недостатки тестов (;)). Кажется, что основная проблема здесь заключается в понимании использования определенных функций Stream и их поведения.
Попробуйте что-то вроде:
LongStream.rangeClosed(1, n).parallel().reduce(0L, Long::sum)
но, если честно, следует адаптировать и последовательный:
LongStream.rangeClosed(1, n).reduce(0L, Long::sum)
Теперь я получил такое поведение во время выполнения:
Long Range value - -9223372036854775808 to 9223372036854775807
Time in sequential execution 90 msec with sum = 5000000050000000
Time in parallel execution 25 msec with sum = 5000000050000000
Полагаю, именно этого вы и ожидали.
Как и с любым другим API, вы должны понимать, что делают конкретные методы, особенно если вы хотите идти параллельно. Но, как вы можете видеть, даже последовательная обработка получает огромное преимущество от использования этого другого подхода.
Посмотрите на https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html#StreamOps, чтобы получить представление о типах методов.
Например, использование limit :
Аналогично, операции, которые по своей природе связаны с порядком,
например, limit (), может потребоваться буферизация для обеспечения правильного упорядочения,
подрывая пользу параллелизма .