[JAVA] Flux et flux parallèle

la différence

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

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 -> {};
}

résultat

stream
13381900ns

parallelStream
8380600ns

C'est assez différent

Cependant ...

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

Recommended Posts

Flux et flux parallèle
Point 48: Soyez prudent lorsque vous créez des flux parallèles
Traitement parallèle et parallèle dans divers langages (édition Java)
Efficace Java 3e édition Chapitre 7 Lambda et Stream
Élément 80: Préférez les exécuteurs, les tâches et les flux aux threads