Een threadpool implementeren voor batchverwerking
Stel je voor dat je een systeem voor documentverwerking ontwikkelt dat meerdere documenten tegelijk moet afhandelen. Elk document vereist intensieve verwerking die parallel moet gebeuren, maar je wilt het aantal gelijktijdige operaties beperken om overbelasting van het systeem te voorkomen. Je implementeert een oplossing met ExecutorService om de verwerkingslast efficiënt te beheren.
Deze oefening maakt deel uit van de cursus
Code optimaliseren in Java
Oefeninstructies
- Maak een vaste threadpool met 3 threads.
- Dien de methode
processDocument(doc)als taak in bij de executor. - Zet de executor stop zonder onmiddellijke, geforceerde beëindiging.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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";
}
}