Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Herausforderung Executors | Hochrangige Synchronisationsmechanismen
Multithreading in Java
course content

Kursinhalt

Multithreading in Java

Multithreading in Java

1. Grundlagen der Multithread-Verarbeitung
2. Synchronisierte Sammlungen
3. Hochrangige Synchronisationsmechanismen
4. Best Practices für Multithreading

book
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), wobei nThreads die Anzahl der Threads im Pool ist;

  • Aufgabenimplementierung: Implementieren Sie eine WordCountTask-Klasse, die das Callable<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 Sie ExecutorService, um Jobs zur Ausführung an den Thread-Pool zu senden. Die Jobs müssen die WordCountTask-Klasse verwenden.

Hinweis

Auch der String, den Sie in einem separaten Thread bilden, muss zurückgegeben werden, und Sie müssen die get()-Methode des Future-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.

java

Main

copy
1
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

java

Main

copy
1
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

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

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