Einen Thread-Pool für Batch-Verarbeitung implementieren
Stell dir vor, du entwickelst ein Dokumentverarbeitungssystem, das mehrere Dokumente gleichzeitig bearbeiten muss. Jedes Dokument erfordert eine rechenintensive Verarbeitung, die parallel erfolgen sollte, aber du möchtest die Anzahl gleichzeitiger Operationen begrenzen, um eine Systemüberlastung zu vermeiden. Du implementierst eine Lösung mit ExecutorService, um die Verarbeitungslast effizient zu steuern.
Diese Übung ist Teil des Kurses
Codeoptimierung in Java
Anleitung zur Übung
- Erstelle einen festen Thread-Pool mit 3 Threads.
- Reiche die Methode
processDocument(doc)als Aufgabe beim Executor ein. - Fahre den Executor herunter, ohne die Beendigung sofort zu erzwingen.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
public class DocumentProcessor {
public static void main(String[] args) throws InterruptedException {
List documents = List.of("Doc1", "Doc2", "Doc3", "Doc4", "Doc5");
List> futures = new ArrayList<>();
// Create a fixed thread pool with 3 threads
ExecutorService executor = Executors.____(____);
for (String doc : documents) {
// Submit the processDocument() method to the executor
futures.add(executor.submit(() -> ____(____)));
}
// Shutdown the executor and wait for termination
executor.____();
executor.awaitTermination(10, TimeUnit.SECONDS);
try {
for (Future future : futures) {
System.out.println(future.get());
}
} catch (ExecutionException e) {
System.out.println("Error processing documents: " + e.getMessage());
}
}
private static String processDocument(String docId) throws InterruptedException {
System.out.println("Processing " + docId + " on thread " + Thread.currentThread().getName());
Thread.sleep((long) (Math.random() * 1000));
return docId + " Processed";
}
}