2011-06-05 12 views
8

Tenemos una aplicación Java que procesa las solicitudes. Naturalmente, hay un grupo de hilos con hilos nombrados con algunos nombres insignificantes como "procesador-1", "procesador-2", etc. Nos preguntamos si es una buena idea cambiar el nombre del hilo de procesamiento cada vez que se solicita un nombre. eso indicaría qué solicitud se está procesando.¿Es una buena idea cambiar dinámicamente los nombres de los subprocesos de procesamiento en Java?

Tengo la sensación de que algo anda mal, pero no puedo pensar en una buena razón. Puedo recordar varios casos de análisis de problemas de subprocesos múltiples de volcados de hebras y fue muy importante para mí saber si veo el mismo hilo en dos vuelcos consecutivos o no. Sin embargo, me doy cuenta de que podría mirar el ID del hilo en su lugar. En log4j logs es una práctica común para escribir el nombre del hilo y recuerdo muchos casos de filtrado por él. Pero aún no estoy seguro de tener una buena "línea de defensa" aquí.

¿Cuál es la práctica más común? ¿Es una buena idea seguir cambiando el nombre de los hilos?

Hay preguntas relacionadas como Renaming Threads in Java o Should threads in Java be named for easier debugging? pero no resuelven este problema específico.

+0

Thread.getId es realmente bueno. Cambie el nombre de los hilos como mejor le parezca, la información es únicamente para la depuración y es solo un campo 'char [] name' en la clase Thread. – bestsss

+0

para la depuración está bien; de lo contrario, no – MeBigFatGuy

+0

@MeBigFatGuy, aparte de los nombres de los subprocesos de depuración/creación de perfiles no sirve para nada (y no se usan internamente) – bestsss

Respuesta

3

Yo le daría a cada hilo un nombre significativo, pero no dinámicamente cambiante.

Almacenar información sobre qué solicitud se está procesando suena bien, pero almacenar eso en el nombre del subproceso olores. Puede registrar esa información, o almacenarla en un ThreadLocal, o ...?

+1

ThreadLocal no funciona con la depuración (al menos no es fácil). – bestsss

4

Es una buena idea.

El único propósito del nombre del subproceso es para el diagnóstico, por lo que le recomendamos que nombre/cambie el nombre de los subprocesos de la mejor manera que lo ayude a comprender qué está sucediendo en el tiempo de ejecución.

Especialmente para hilos en un grupo de hilos. Sus identidades no tienen sentido. Es funcionalmente equivalente a tener un nuevo hilo por tarea. Solo nos interesan los nombres de las tareas, y el nombre de la secuencia es un lugar conveniente para almacenar un nombre de tarea.

Cuestiones relacionadas