Contenu du cours
Multithreading en Java
Multithreading en Java
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'interfaceCallable<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 utilisantExecutorService
, envoyez des tâches au pool de threads pour exécution. Les tâches doivent utiliser la classeWordCountTask
.
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'interfaceFuture
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.
Main
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
Main
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
Merci pour vos commentaires !