¿Cómo ejecutar múltiples subprocesos simultáneamente en Java? Enfoque ExecutorService

Publicado: 2021-10-09
¿Cómo ejecutar múltiples subprocesos simultáneamente en Java? Enfoque ExecutorService

Echemos un vistazo a este ejemplo nuevamente: ¿Cómo obtener el estado de ping de cualquier punto final HTTP en Java?

¿Has notado la ejecución del hilo para ese ejemplo? es secuencial What if you have 500 endpoints? Apuesto a que tienes que esperar al menos 5 minutos para obtener el resultado. Que estoy seguro que no es la mejor solución.

¿Ahora que? La pregunta correcta sería:

  • ¿Cómo ejecutar múltiples subprocesos al mismo tiempo?
  • ¿Cómo implementar múltiples hilos en Java?
  • ¿Cómo ejecuto diferentes subprocesos en Java?
  • Java: ¿dónde está el tutorial de programación de subprocesos múltiples?
  • Subproceso: ¿Cómo usar múltiples subprocesos para acelerar el procesamiento?

ExecutorService Approach es su respuesta.

Un Ejecutor que proporciona métodos para administrar la terminación y métodos que pueden producir un Futuro para rastrear el progreso de una o más tareas asincrónicas.

Se puede cerrar un ExecutorService, lo que hará que rechace nuevas tareas. Se proporcionan dos métodos diferentes para cerrar un ExecutorService. El método shutdown() permitirá que las tareas enviadas anteriormente se ejecuten antes de finalizar, mientras que el método shutdownNow() evita que se inicien las tareas en espera e intenta detener las tareas que se están ejecutando actualmente.

Al finalizar, un ejecutor no tiene tareas en ejecución activa, no hay tareas en espera de ejecución y no se pueden enviar tareas nuevas. Un ExecutorService no utilizado debe cerrarse para permitir la recuperación de sus recursos.

El envío del método amplía el método base Executor.execute ( java.lang.Runnable ) al crear y devolver un futuro que se puede usar para cancelar la ejecución y/o esperar a que se complete. Los métodos invokeAny e invokeAll realizan las formas más comúnmente útiles de ejecución masiva, ejecutando una colección de tareas y luego esperando que se complete al menos una o todas. (Class ExecutorCompletionService se puede usar para escribir variantes personalizadas de estos métodos).

La clase Executors proporciona métodos de fábrica para los servicios de ejecución proporcionados en este paquete.

  • java – ExecutorService, ¿cómo esperar a que terminen todas las tareas?
  • Una guía para Java ExecutorService
  • Grupo de subprocesos de Java: explicación de ExecutorService

A continuación se muestra un ejemplo de Java simple que explica el usage of ExecutorService .

Producción:

Ahora revisa el resultado.

Debería ser en unos segundos. Espero que encuentres esto útil. Intente ejecutar esto más de una vez y es posible que vea un resultado diferente, ya que todos los subprocesos se ejecutan en paralelo y quien obtenga un resultado rápido, verá el resultado publicado en la consola de Eclipse.

Avisame para cualquier consulta.