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
<Kurs>Codeoptimierung in Java</Kurs>Übungsanweisungen
- 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 praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
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";
}
}