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 unThreadPoolExecutor
y se ha alcanzado el tamaño máximo de grupo. - al llamar a
execute()
en unThreadPoolExecutor
al mismo tiempo queshutdownNow
, y esencialmente ha perdido la carrera con la llamadashutdownNow
. - 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.