Implementar un pool de hilos para procesamiento por lotes
Imagina que estás desarrollando un sistema de procesamiento de documentos que debe manejar varios documentos a la vez. Cada documento requiere un procesamiento intensivo que conviene ejecutar en paralelo, pero quieres limitar el número de operaciones concurrentes para evitar sobrecargar el sistema. Implementarás una solución usando ExecutorService para gestionar la carga de trabajo de forma eficiente.
Este ejercicio forma parte del curso
Optimizing Code in Java
Instrucciones del ejercicio
- Crea un pool de hilos fijo con 3 hilos.
- Envía el método
processDocument(doc)como tarea al executor. - Apaga el executor sin forzar su terminación inmediata.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
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";
}
}