LoslegenKostenlos loslegen

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

Kurs anzeigen

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";
    }
}
Code bearbeiten und ausführen