Comece agoraComece grátis

Implementando um pool de threads para processamento em lote

Imagine que você está desenvolvendo um sistema de processamento de documentos que precisa lidar com vários arquivos ao mesmo tempo. Cada documento exige um processamento intenso que deve ocorrer em paralelo, mas você quer limitar o número de operações concorrentes para evitar sobrecarga do sistema. Você vai implementar uma solução usando ExecutorService para gerenciar a carga de processamento com eficiência.

Este exercicio faz parte do curso

Otimização de Código em Java

Ver curso

Instruções do exercicio

  • Crie um pool fixo de threads com 3 threads.
  • Envie o método processDocument(doc) como uma tarefa para o executor.
  • Encerre o executor sem forçar a finalização imediata.

exercicio interativo prático

Tente este exercicio completando este código de exemplo.

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 e Executar Código