Kursinhalt
Multithreading in Java
Multithreading in Java
Herausforderung Executors
Aufgabe
Stellen Sie sich vor, Sie haben eine Liste von Dateien, von denen jede Zeilen mit Text enthält. Ihre Aufgabe ist es, diese Zeilen parallel zu lesen und die Anzahl der Wörter in jeder Zeile zu zählen. Verwenden Sie ExecutorService
, Future
und einen Thread-Pool, um die Aufgabe zu erledigen.
Anforderungen:
-
Erstellen Sie einen Thread-Pool: Erstellen Sie einen Thread-Pool fester Größe mit
Executors.newFixedThreadPool(int nThreads)
, wobeinThreads
die Anzahl der Threads im Pool ist; -
Aufgabenimplementierung: Implementieren Sie eine
WordCountTask
-Klasse, die dasCallable<String>
-Interface implementiert und eine Datei als Eingabe erhält. In der call-Methode dieser Klasse lesen Sie Zeilen aus der Datei, zählen die Anzahl der Wörter in jeder Zeile und geben das Ergebnis zurück; -
Verwendung von
ExecutorService
: Verwenden SieExecutorService
, um Jobs zur Ausführung an den Thread-Pool zu senden. Die Jobs müssen dieWordCountTask
-Klasse verwenden.
Hinweis
Auch der String, den Sie in einem separaten Thread bilden, muss zurückgegeben werden, und Sie müssen die
get()
-Methode desFuture
-Interfaces verwenden, um das Ergebnis der Thread-Ausführung zu erhalten und in der main-Methode auszugeben.
Aus Datei lesen
Um die call()
Methode zu implementieren, können Sie BufferedReader
verwenden, um Zeichenfolgen aus Dateien zu lesen. Verwenden Sie einen try-with-resources
Block, damit Ressourcen automatisch für Sie geschlossen werden.
Main
BufferedReader reader = new BufferedReader(new FileReader(file));
Verwenden Sie die readLine()
Methode, um jede Zeile zu lesen, und achten Sie darauf, null
zu überprüfen, um festzustellen, wann Sie das Ende der Datei erreicht haben.
Teilen Sie als Nächstes die Zeichenkette in ein Array von Zeichenketten auf, indem Sie die split("\\s+")
Methode mit dem \\s+
Muster verwenden, das die Zeichenkette durch Leerzeichen trennt, und ermitteln Sie dann die Größe des Arrays.
Verwenden Sie in der Zeichenkette selbst, die der Stream zurückgibt, dieses Format
Main
String.format("File: %s | Line: %s | Word Count %d", fileName, line, countWord)
Dateien sind bereits im Projekt, Sie müssen sie nicht erstellen oder ändern!
Beispielausgabe
Danke für Ihr Feedback!