N'est-ce pas parallèle? Faites attention à la commande.
Cette fois, ce n'est pas la mesure de l'ordre de traitement, mais la mesure de la performance.
la mesure.java
package test1;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Test3 {
public static void main(String[] args) {
Long start1 = System.nanoTime();
normal();
Long end1 = System.nanoTime();
System.out.println("stream\r\n" + (end1 - start1) + "ns\r\n");
Long start2 = System.nanoTime();
parallel();
Long end2 = System.nanoTime();
System.out.println("parallelStream\r\n" + (end2 - start2) + "ns");
}
private static void normal() {
generate().stream().filter(filter).map(v -> v + 1).forEachOrdered(qwe);
}
private static void parallel() {
generate().parallelStream().filter(filter).map(v -> v + 1).forEachOrdered(qwe);
}
private static List<String> generate() {
return IntStream.range(0, 9999).boxed().map(String::valueOf).collect(Collectors.toList());
}
private static final Predicate<String> filter = v -> v.length() == 3;
private static final Consumer<String> qwe = v -> {};
}
stream
13381900ns
parallelStream
8380600ns
C'est assez différent
Parce qu'il est multi-thread Ce n'est plus thread-safe.
Si vous faites quelque chose de mal, vous obtiendrez une exception null ou InterruptedException. Contrôlons fermement la synchronisation