ComenzarEmpieza gratis

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

Ver curso

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";
    }
}
Editar y ejecutar código