30 de septiembre de 2009

Nombrando Threads en Java

Suponiendo que tenemos definida una claseX que implementa Runnable

Al crear Threads de esta manera :

for(int i=0;i<3;i++)
{ 
    ClaseX objetoX=new ClaseX();
    Thread th = new Thread (objetoX);
    th.start();
}
Tomarán nombres automáticos numerados
Thread-0
Thread-1
Thread-2
Así nombrados no indican de qué clase de implementación de threads se trata, ni ayudan para identificarlos en debugging. Otra opción es ponerles el nombre de la clase:
for(int i=0;i<3;i++)
{

    ClaseX objetoX=new ClaseX();
    Thread th = new Thread (objetoX, getClass().getSimpleName());
    th.start();
}
Con la desventaja de que todos tendrían el mismo nombre:
ClaseX
ClaseX
ClaseX
Usando ambas cosas a la vez
for(int i=0;i<3;i++)
{

    ClaseX objetoX=new ClaseX();
    Thread th = new Thread (objetoX);
    th.setName(getClass().getSimpleName() + " " + th.getName());
    th.start();
}
Ahora sí.
ClaseX Thread-0
ClaseX Thread-1
ClaseX Thread-2
Otra manera posible es nombrarlos con la clase más la fecha y hora de creación, en lugar usar un nombre numerado, etc... Usar un buen nombre de thread además de ser útil en debugging, puede servir para saber a qué Clase pertenece el método que está invocando a una implementación de una interfaz, sin necesidad de utilizar argumentos.