Estoy usando un ThreadPoolExecutor
en Java para administrar una gran cantidad de subprocesos en ejecución. Creé mi propio ThreadFactory
simple para que pueda darle a los hilos mejores nombres.Con ThreadPoolExecutor, ¿cómo obtener el nombre del subproceso que se ejecuta en el grupo de subprocesos?
El problema es que el nombre se establece en el subproceso cuando se crea el grupo de subprocesos por primera vez y no está vinculado a la tarea en la que se está ejecutando realmente el grupo de subprocesos. Entiendo esto ... mis Runnables y Callables, aunque tienen nombres, son en realidad un nivel de abstracción de los hilos en ejecución de ThreadPoolExecutor
.
Ha habido algunas otras preguntas sobre StackOverflow sobre cómo crear nombres para ThreadPoolExecutor
grupos de hilos. (Consulte How to give name to a callable Thread? y How to name the threads of a thread pool in Java.)
Lo que quiero saber es: ¿Alguien tiene una buena solución para mantener el nombre del hilo del grupo de subprocesos sincronizado con el Runnable que se está ejecutando realmente?
es decir, Si llamo Thread.getCurrentThread().getName()
me gustaría que no para devolver el nombre de la agrupación de hebras de nivel superior, sino más bien el nombre de la Callable/Ejecutable que el hilo se está ejecutando actualmente.
Dado que esto es principalmente para fines de depuración y registro, estoy tratando de evitar una solución que implique que coloque un nuevo código en cada Runnable que pueda enviarse al ThreadPoolExecutor - Prefiero poner un código en el ThreadFactory o envuelva el ThreadPoolExecutor mismo para que el cambio se realice en un solo lugar. Si tal solución no existe, probablemente no me moleste, ya que no es una misión crítica.
comienzan edición Para aclarar, sé que puedo poner un Thread.currentThread().setName("my runnable name");
como la primera línea del método run de cada Ejecutable, pero estoy tratando de evitar hacer eso. Estoy siendo un perfeccionista aquí, y me doy cuenta, así que no me ofenderé si la gente quiere hacer un comentario sobre esta pregunta y dímelo. final de edición
Mi otra pregunta, supongo, es si la gente piensa que es una mala idea para hacer tal cosa. ¿Debo tener cuidado de actualizar el nombre del grupo de subprocesos de esta manera?
¡Gracias por cualquier sugerencia!
"manteniendo el nombre de la rosca grupo de subprocesos en sincronía con el Ejecutable que realmente se está ejecutando" -> Ejecutable/rescatable no define un nombre, por lo que no puede ver bien el empuje de su pregunta . ¿Su ThreadFactory realmente le da a cada hilo un nombre distinto? – serg10
Correcto, cada uno de mis Runnables y Callables implementan una interfaz con nombre, así que tengo acceso a los nombres. Me doy cuenta de que soy exigente porque ya he implementado una función especial para todos mis Runnables, pero quiero evitar agregar código adicional que establece manualmente el nombre de la secuencia. –
Editado para mayor claridad, cambiando algunos "grupos de hilos" a "hilos", y algunos "hilos" a "tareas". –