2009-01-21 13 views
7

Estoy trabajando en un proyecto que poco a poco va creciendo y aumenta el número de subprocesos activos utilizados por muchos procesos diferentes. Últimamente, he echado un vistazo más de cerca a los hilos en ejecución en el depurador y me he dado cuenta de que muchas de las bibliotecas de terceros han dado nombres muy pobres a sus hilos: Timer-0, qtp0, etc. Quiero que otros desarrolladores no estén familiarizados con los hilos mal nombrados para saber al instante qué se está ejecutando.Cambiar el nombre de subprocesos en Java

En lugar de escribir parches para las librerías que estamos utilizando, ¿alguien sabe cómo cambiar el nombre de las secuencias en ejecución? O si esto es incluso una buena idea? Cualquier sugerencia sera apreciada.

+4

Simplemente curioso aquí - hace hilos mal llamada molestar a alguien más? – Elijah

+0

Debe corregir las bibliotecas que crean subprocesos incorrectos o no nombrados.No me gustaría depurar los hilos de tus bibliotecas solo para encontrar que los nombres cambien en otro lugar. –

+0

Buen punto. Debo hacer un esfuerzo para ver los cambios puestos en sus próximos lanzamientos. No quiero poner nombres, pero todos son proyectos de código abierto. – Elijah

Respuesta

4

Si el problema está en las bibliotecas de código abierto, entonces la mejor solución es proporcionar parches a esos productos para un mejor nombre de los hilos. A menos que se ejecute un administrador de seguridad, puede cambiar el nombre de cualquier hilo enumerando los hilos (como han mencionado otros) y aplicando un nombre arbitrario a cada uno, pero esta es una forma frágil de nombrar hilos que no son los suyos. Si la biblioteca de terceros cambia su nombre, tendrá que cambiar su código.

Acepto que las bibliotecas de terceros con subprocesos mal nombrados dificultan la comprensión de lo que sucede en la aplicación. Pero renombrar hilos de una biblioteca de terceros es arriesgado. ¿Qué sucede si su próximo lanzamiento cambia la forma en que nombran los hilos? ¿Y cómo maneja una biblioteca de terceros que no hace ningún intento de nombrar hilos?

EDIT: Añadir texto posterior que de alguna manera desapareció desde el extremo

2

Puede usar Thread.enumerate() o Thread.getAllStackTraces() para obtener una lista de los hilos en ejecución. A continuación, puede llamar al Thread.setName() en cada uno.

No puedo decir si es una buena idea o no, pero probablemente me inclino por "no". Cuantos más códigos escribas, más código tienes que mantener.

6

Sí, puede cambiar el nombre de un hilo con el método setName().

En cuanto a si es una buena idea, no se puede asegurar, pero confiar en el nombre del hilo para cualquier otra cosa que no sea una descripción legible sería una decisión muy mala, y la mayoría de las bibliotecas no lo harán. Por lo tanto, es poco probable que se rompa nada si se les cambia el nombre.

+1

El único propósito sería la legibilidad humana. – Elijah

1

setName() se puede utilizar para cambiar el nombre de un hilo pero debe tener alguna forma de determinar cómo debe llamarse el hilo.
getAllStackTraces() permitiría que el programa ejemplo el rastro de la pila y utilice los nombres de clase/métodos/nombre de archivo como una pista sobre cómo llamar al hilo.

5

nombro a todos los temas que creo. He tenido demasiadas aplicaciones filtrando hilos, o teniendo hilos que de otra forma saldrían de control.

Cuanto más trate a Java como un sistema operativo, más fácil se vuelve a administrar. :)

1

Esto plantea la cuestión de las mejores prácticas sobre la convención de nombres para hilos. No he visto ninguna guía comunitaria en este sentido.

1

Cambio de Java Tema Nombre

Thread.currentThread().setName("MyThread"); 
Cuestiones relacionadas