"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como esperar com eficiência por uma lista de futuros e lidar com exceções?

Como esperar com eficiência por uma lista de futuros e lidar com exceções?

Publicado em 2024-11-02
Navegar:906

How to Efficiently Wait for a List of Futures and Handle Exceptions?

Esperando eficientemente em uma lista de futuros

Ao lidar com uma lista de futuros, o objetivo é esperar até a conclusão ou a ocorrência de uma exceção em qualquer futuro. Uma abordagem ingênua envolvendo chamadas individuais para f.get() pode levar a uma espera desnecessária se uma exceção ocorrer logo no início.

Evitando espera desnecessária com CompletionService

Para resolver isso problema, a classe CompletionService entra em ação. Ele permite que tarefas assíncronas sejam executadas e seus resultados sejam recuperados de maneira segura para threads à medida que ficam disponíveis. Veja como usá-lo:

Executor executor = Executors.newFixedThreadPool(4);
CompletionService completionService = new ExecutorCompletionService(executor);

// Submit tasks to the service
for (int i = 0; i () {
        @Override
        public SomeResult call() {
            // Task logic here
            return result;
        }
    });
}

int received = 0;
boolean errors = false;

// Loop until all tasks are complete or an error occurs
while (received  resultFuture = completionService.take(); // Blocks if nothing available
    try {
        SomeResult result = resultFuture.get();
        received  ;
        // Process result here
    } catch (Exception e) {
        // Log error
        errors = true;
    }
}

// Consider canceling remaining tasks if an error occurred

Ao usar a abordagem CompletionService, você pode monitorar a conclusão das tarefas em tempo real e interromper o processamento adicional se ocorrer um erro, evitando assim esperas desnecessárias.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3