Kom igångKom igång gratis

Implementera en trådpool för batchbearbetning

Tänk dig att du utvecklar ett dokumenthanteringssystem som behöver bearbeta flera dokument samtidigt. Varje dokument kräver intensiv bearbetning som bör ske parallellt, men du vill begränsa antalet samtidiga operationer för att undvika systemöverbelastning. Du ska implementera en lösning med ExecutorService för att hantera arbetsbelastningen på ett effektivt sätt.

Den här övningen är en del av kursen

Optimera kod i Java

Visa kurs

Övningsinstruktioner

  • Skapa en fast trådpool med 3 trådar.
  • Skicka in metoden processDocument(doc) som en uppgift till exekutorn.
  • Stäng av exekutorn utan att tvinga fram en omedelbar avslutning.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

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";
    }
}
Redigera och kör kod