Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Défi Exécuteurs | Mécanismes de Synchronisation de Haut Niveau
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
Défi Exécuteurs

Tâche

Imaginez que vous avez une liste de fichiers, chacun contenant des lignes de texte. Votre tâche est de lire les lignes de ces fichiers en parallèle et de compter le nombre de mots dans chaque ligne. Utilisez ExecutorService, Future, et un pool de threads pour accomplir la tâche.

Exigences :

  • Créer un pool de threads : Créez un pool de threads de taille fixe en utilisant Executors.newFixedThreadPool(int nThreads), où nThreads est le nombre de threads dans le pool;

  • Implémentation de la tâche : Implémentez une classe WordCountTask qui implémente l'interface Callable<String> et reçoit un fichier en entrée. Dans la méthode call de cette classe, lisez les lignes du fichier, comptez le nombre de mots dans chaque ligne, et retournez le résultat;

  • Utilisation de ExecutorService : En utilisant ExecutorService, envoyez des tâches au pool de threads pour exécution. Les tâches doivent utiliser la classe WordCountTask.

Remarque

De plus, la chaîne que vous formez dans un thread séparé, vous devez la retourner et utiliser la méthode get() de l'interface Future pour obtenir le résultat de l'exécution du thread et l'afficher à la console dans la méthode principale.

Lire à partir d'un fichier

Pour implémenter la méthode call(), vous pouvez utiliser BufferedReader pour lire des chaînes à partir de fichiers. Utilisez un bloc try-with-resources afin que les ressources soient automatiquement fermées pour vous.

java

Main

copy
1
BufferedReader reader = new BufferedReader(new FileReader(file));

Utilisez la méthode readLine() pour lire chaque ligne, et assurez-vous de vérifier null pour déterminer quand vous avez atteint la fin du fichier.

Ensuite, divisez la chaîne en un tableau de chaînes en utilisant la méthode split("\\s+") avec le motif \\s+, qui sépare la chaîne par des espaces, puis obtenez la taille du tableau.

Dans la chaîne elle-même, que le flux retourne, utilisez ce formatage

java

Main

copy
1
String.format("File: %s | Line: %s | Word Count %d", fileName, line, countWord)

Les fichiers sont déjà dans le projet, vous n'avez pas besoin de les créer ou de les modifier !

Exemple de sortie

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

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