Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre API de Flux Parallèle | Collections Synchronisées
Multithreading en Java
course content

Contenu du cours

Multithreading en Java

Multithreading en Java

1. Notions de Base du Multithreading
2. Collections Synchronisées
3. Mécanismes de Synchronisation de Haut Niveau
4. Meilleures Pratiques de Multithreading

book
API de Flux Parallèle

Vous êtes probablement déjà familier avec le Stream API, ses méthodes, et comment il fonctionne (Sinon, étudiez ce sujet puis revenez à ce chapitre).

Un flux de données régulier n'est pas parallèle, c'est-à-dire que, peu importe à quel point il peut être pratique et élégant dans le code, utiliser le Stream API sans utiliser la méthode parallelStream(), avec une grande quantité de données, peut grandement affecter les performances.

Il existe également une méthode parallel() qui peut être utilisée après la conversion en stream.

La différence est que parallelStream() crée un flux parallèle directement à partir de la collection, tandis que parallel() convertit un flux sériel existant en un flux parallèle.

Remarque

Et surtout, nous, en tant que programmeurs, n'avons rien à faire sauf changer la méthode stream() en parallelStream(). Stream API fait tout par lui-même et optimise notre programme !

Exemple : Traitement d'une Liste de Nombres

Supposons que nous ayons une liste de nombres et que nous voulions trouver la somme des carrés de tous les nombres de la liste.

java

Main

copy
123456789101112131415161718192021222324252627
package com.example; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { // Create a list of integers List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); // Sequential stream to sum the squares of numbers int sumSequential = numbers.stream() // Create a sequential stream from the list .mapToInt(n -> n * n) // Map each number to its square .sum(); // Sum the squares // Print the result of the sequential sum System.out.println("Sum of squares (sequential): " + sumSequential); // Parallel stream to sum the squares of numbers int sumParallel = numbers.parallelStream() // Create a parallel stream from the list .mapToInt(n -> n * n) // Map each number to its square .sum(); // Sum the squares // Print the result of the parallel sum System.out.println("Sum of squares (parallel): " + sumParallel); } }

Comme vous pouvez le voir, nous avons simplement remplacé stream() par parallelStream() ET C'EST TOUT. Dans cet exemple, cela ne donnera aucun gain, car dans un environnement à un seul thread, un tableau de 10 caractères sera exécuté plus rapidement. Parce que dans l'implémentation de Stream API, de nombreuses actions sont effectuées pour distribuer la tâche entre les threads.

Remarque

Stream API décide également lui-même combien de threads il utilisera pour cette tâche, afin qu'elle soit aussi efficace que possible.

Comment cela fonctionne sous le capot :

1. Création d'un flux parallèle : Lorsque vous appelez parallelStream(), Java crée un flux parallèle basé sur la source de données originale ;

2. Utilisation de ForkJoinPool (nous explorerons plus tard) : Les flux parallèles utilisent un pool de threads commun, ForkJoinPool.commonPool(), qui gère un groupe de threads de travail ;

3. Division : Les données dans un thread parallèle sont divisées en parties à l'aide de l'interface Spliterator ;

4. Traitement : Chaque thread de travail dans ForkJoinPool traite sa partie des données ;

5. Fusion : Après le traitement des données, les threads de travail fusionnent les résultats.

Avantages des flux parallèles

Performance accrue est l'un des principaux avantages des threads parallèles, car ils permettent la distribution des tâches sur plusieurs threads, ce qui entraîne un traitement plus rapide sur les processeurs multi-cœurs.

De plus, la facilité d'utilisation de l'API des threads parallèles le rend simple à intégrer dans le code existant, éliminant le besoin d'une gestion complexe des threads.

En outre, la scalabilité est un avantage significatif, car les threads parallèles s'ajustent automatiquement au nombre de cœurs de processeur disponibles, optimisant ainsi l'exécution des tâches de manière efficace.

1. Quelle classe est utilisée par les threads parallèles pour contrôler les threads ?

2. Quelle méthode est utilisée pour créer un flux parallèle ?

3. Que fait l'interface Spliterator dans le contexte des flux parallèles ?

Quelle classe est utilisée par les threads parallèles pour contrôler les threads ?

Quelle classe est utilisée par les threads parallèles pour contrôler les threads ?

Sélectionnez la réponse correcte

Quelle méthode est utilisée pour créer un flux parallèle ?

Quelle méthode est utilisée pour créer un flux parallèle ?

Sélectionnez la réponse correcte

Que fait l'interface Spliterator dans le contexte des flux parallèles ?

Que fait l'interface Spliterator dans le contexte des flux parallèles ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 2
We're sorry to hear that something went wrong. What happened?
some-alt