Como executar vários threads simultaneamente em Java? Abordagem de serviço executor

Publicados: 2021-10-09
Como executar vários threads simultaneamente em Java? Abordagem de serviço executor

Vamos dar uma olhada neste exemplo novamente: Como obter o status de ping de qualquer ponto final HTTP em Java?

Você notou a execução do thread para esse exemplo? É sequencial. What if you have 500 endpoints? Aposto que você tem que esperar pelo menos 5 minutos para obter resultado. O que tenho certeza que não é a melhor solução.

O que agora? A pergunta correta seria:

  • Como executar vários threads simultaneamente?
  • Como implementar vários threads em Java?
  • Como executo diferentes threads em Java?
  • Java – Onde está o Tutorial de Programação Multithreading?
  • Thread: Como usar vários threads para acelerar o processamento?

ExecutorService Approach é a sua resposta.

Um Executor que fornece métodos para gerenciar o encerramento e métodos que podem produzir um Future para rastrear o progresso de uma ou mais tarefas assíncronas.

Um ExecutorService pode ser encerrado, o que fará com que ele rejeite novas tarefas. Dois métodos diferentes são fornecidos para encerrar um ExecutorService. O método shutdown() permitirá que as tarefas enviadas anteriormente sejam executadas antes de serem encerradas, enquanto o método shutdownNow() impede que as tarefas em espera sejam iniciadas e tenta interromper as tarefas em execução no momento.

Após o término, um executor não tem tarefas em execução ativa, nenhuma tarefa aguardando execução e nenhuma nova tarefa pode ser enviada. Um ExecutorService não utilizado deve ser encerrado para permitir a recuperação de seus recursos.

O método submit estende o método base Executor.execute ( java.lang.Runnable ) criando e retornando um Future que pode ser usado para cancelar a execução e/ou aguardar a conclusão. Os métodos invokeAny e invokeAll executam as formas mais úteis de execução em massa, executando uma coleção de tarefas e, em seguida, aguardando a conclusão de pelo menos uma, ou todas. (A classe ExecutorCompletionService pode ser usada para escrever variantes personalizadas desses métodos.)

A classe Executors fornece métodos de fábrica para os serviços de executor fornecidos neste pacote.

  • java – ExecutorService, como esperar que todas as tarefas terminem?
  • Um guia para o Java ExecutorService
  • Java Thread Pool – explicação do ExecutorService

Abaixo está um exemplo simples de Java que explica o usage of ExecutorService .

Saída:

Agora confira o resultado.

Deve ser em apenas alguns segundos. Eu espero que você ache isto útil. Tente executar isso mais de uma vez e você poderá ver resultados diferentes, pois todos os threads estão sendo executados em paralelo e quem obtiver resultado rápido, você verá o resultado postado no console do Eclipse.

Deixe-me saber para qualquer consulta.