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
Ö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";
}
}