С Java 8 и lambdas легко перебирать коллекции как потоки и так же просто использовать параллельный поток. Два примера из документов, второй - с помощью parallelStream:
myShapesCollection.stream()
.filter(e -> e.getColor() == Color.RED)
.forEach(e -> System.out.println(e.getName()));
myShapesCollection.parallelStream() // <-- This one uses parallel
.filter(e -> e.getColor() == Color.RED)
.forEach(e -> System.out.println(e.getName()));
До тех пор, пока меня не волнует порядок, всегда ли было бы полезно использовать параллель? Можно было бы подумать, что это быстрее делит работу на большее количество ядер.
Есть ли другие соображения? Когда следует использовать параллельный поток и когда следует использовать непараллельный?
(Этот вопрос предлагается инициировать обсуждение того, как и когда использовать параллельные потоки, а не потому, что я думаю, что всегда использовать их - хорошая идея.)