Aan de slagGa gratis aan de slag

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

Cursus bekijken

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";
    }
}
Code bewerken en uitvoeren