util newfixedthreadpool example concurrent java concurrency

newfixedthreadpool - ¿Por qué Executors.newCachedThreadPool lanza java.util.concurrent.RejectedExecutionException durante el envío?



spring boot executorservice (2)

No veo ningún lugar en la invocación de los métodos Executors.newCachedThreadPool() donde se lanza una RejectedExecutionException . Solo hay tres casos en los que parece ser lanzado en Java 6:

  • al llamar a execute() en un ThreadPoolExecutor y se ha alcanzado el tamaño máximo de grupo.
  • al llamar a execute() en un ThreadPoolExecutor al mismo tiempo que shutdownNow , y esencialmente ha perdido la carrera con la llamada shutdownNow .
  • cuando se intenta programar la ejecución de un ejecutable en un ScheduledThreadPoolExecutor después de que el ejecutor se haya cerrado.

La cantidad de tareas (subprocesos) enviadas tampoco es enorme en este escenario de prueba.


Deberá proporcionar ejemplos de código de cómo ejemplifica y llama al submit en el grupo (la IP no debe ser un problema aquí ya que no necesitamos detalles de los Callable internos de sus clases Callable ni nada de eso).

Basándose en la información que ha proporcionado, es casi seguro que esté cerrando el servicio del ejecutor en algún lugar antes de enviarlo. Verifique si realiza alguna llamada para shutdown o shutdownNow , y si es así, asegúrese de no agregar tareas después de este punto.

Más allá de eso, es posible que desee registrar su propia implementación de java.util.concurrent.RejectedExecutionHandler para ayudar en la depuración; se llamará a su mensaje de ejecución rejectedExecution cuando el ejecutor no pueda aceptar una tarea, por lo que podría poner alguna lógica de inspección de estado rudimentaria allí para ayudarlo a encontrar la causa.