Herausforderung: Executor-Dienste
Aufgabe
Stellen Sie sich vor, Sie haben eine Liste von Dateien, von denen jede Textzeilen enthält. Ihre Aufgabe ist es, Zeilen aus diesen Dateien parallel zu lesen und die Anzahl der Wörter in jeder Zeile zu zählen. Verwenden Sie dazu ExecutorService, Future und einen Thread-Pool.
Anforderungen:
-
Thread-Pool erstellen: Erstellen Sie einen Thread-Pool mit fester Größe mit
Executors.newFixedThreadPool(int nThreads), wobeinThreadsdie Anzahl der Threads im Pool ist; -
Implementierung der Aufgabe: Implementieren Sie eine Klasse
WordCountTask, die das InterfaceCallable<String>implementiert und eine Datei als Eingabe erhält. In der call-Methode dieser Klasse sollen die Zeilen der Datei gelesen, die Anzahl der Wörter in jeder Zeile gezählt und das Ergebnis zurückgegeben werden; -
Verwendung von
ExecutorService: Verwenden SieExecutorService, um Aufgaben zur Ausführung an den Thread-Pool zu übergeben. Die Aufgaben müssen die KlasseWordCountTaskverwenden.
Außerdem muss der String, den Sie in einem separaten Thread erzeugen, zurückgegeben werden. Verwenden Sie die Methode get() des Future-Interfaces, um das Ergebnis der Thread-Ausführung zu erhalten und in der main-Methode auf der Konsole auszugeben.
Aus Datei lesen
Zur Implementierung der call() Methode kann BufferedReader verwendet werden, um Zeichenketten aus Dateien zu lesen. Verwenden Sie einen try-with-resources Block, damit Ressourcen automatisch für Sie geschlossen werden.
Main.java
1BufferedReader reader = new BufferedReader(new FileReader(file));
Verwenden Sie die Methode readLine(), um jede Zeile zu lesen, und achten Sie darauf, auf null zu prüfen, um das Ende der Datei zu erkennen.
Anschließend die Zeichenkette aufteilen in ein Array von Zeichenketten mit der Methode split("\\s+") und dem Muster \\s+, das die Zeichenkette anhand von Leerzeichen trennt, und dann die Größe des Arrays ermitteln.
Im eigentlichen String, den der Stream zurückgibt, dieses Format verwenden
Main.java
1String.format("File: %s | Line: %s | Word Count %d", fileName, line, countWord)
Dateien sind bereits im Projekt vorhanden, Sie müssen sie nicht erstellen oder ändern!
Beispielausgabe
File: file1.txt | Line: Hello | Word Count: 1
File: file2.txt | Line: Hello I Love Java | Word Count: 4
File: file2.txt | Line: Lol Hello | Word Count: 2
File: file3.txt | Line: Java so so so so very nice | Word Count: 7
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Can you show me how to implement the WordCountTask class?
How do I use ExecutorService to run the WordCountTask for multiple files?
Can you explain how to format the output for each line as shown in the example?
Awesome!
Completion rate improved to 3.33
Herausforderung: Executor-Dienste
Swipe um das Menü anzuzeigen
Aufgabe
Stellen Sie sich vor, Sie haben eine Liste von Dateien, von denen jede Textzeilen enthält. Ihre Aufgabe ist es, Zeilen aus diesen Dateien parallel zu lesen und die Anzahl der Wörter in jeder Zeile zu zählen. Verwenden Sie dazu ExecutorService, Future und einen Thread-Pool.
Anforderungen:
-
Thread-Pool erstellen: Erstellen Sie einen Thread-Pool mit fester Größe mit
Executors.newFixedThreadPool(int nThreads), wobeinThreadsdie Anzahl der Threads im Pool ist; -
Implementierung der Aufgabe: Implementieren Sie eine Klasse
WordCountTask, die das InterfaceCallable<String>implementiert und eine Datei als Eingabe erhält. In der call-Methode dieser Klasse sollen die Zeilen der Datei gelesen, die Anzahl der Wörter in jeder Zeile gezählt und das Ergebnis zurückgegeben werden; -
Verwendung von
ExecutorService: Verwenden SieExecutorService, um Aufgaben zur Ausführung an den Thread-Pool zu übergeben. Die Aufgaben müssen die KlasseWordCountTaskverwenden.
Außerdem muss der String, den Sie in einem separaten Thread erzeugen, zurückgegeben werden. Verwenden Sie die Methode get() des Future-Interfaces, um das Ergebnis der Thread-Ausführung zu erhalten und in der main-Methode auf der Konsole auszugeben.
Aus Datei lesen
Zur Implementierung der call() Methode kann BufferedReader verwendet werden, um Zeichenketten aus Dateien zu lesen. Verwenden Sie einen try-with-resources Block, damit Ressourcen automatisch für Sie geschlossen werden.
Main.java
1BufferedReader reader = new BufferedReader(new FileReader(file));
Verwenden Sie die Methode readLine(), um jede Zeile zu lesen, und achten Sie darauf, auf null zu prüfen, um das Ende der Datei zu erkennen.
Anschließend die Zeichenkette aufteilen in ein Array von Zeichenketten mit der Methode split("\\s+") und dem Muster \\s+, das die Zeichenkette anhand von Leerzeichen trennt, und dann die Größe des Arrays ermitteln.
Im eigentlichen String, den der Stream zurückgibt, dieses Format verwenden
Main.java
1String.format("File: %s | Line: %s | Word Count %d", fileName, line, countWord)
Dateien sind bereits im Projekt vorhanden, Sie müssen sie nicht erstellen oder ändern!
Beispielausgabe
File: file1.txt | Line: Hello | Word Count: 1
File: file2.txt | Line: Hello I Love Java | Word Count: 4
File: file2.txt | Line: Lol Hello | Word Count: 2
File: file3.txt | Line: Java so so so so very nice | Word Count: 7
Danke für Ihr Feedback!