El arte de encontrar hilos en tiempo de ejecución incluye dos clases de Java , hilo y ThreadGroup . Además , hay que recordar el nombre de su hilo cuando se crea. De lo contrario , si usted no nombra a su hilo, usted está confiando en el mecanismo de nomenclatura predeterminado para temas incorporados en Java, y mientras que usted puede ser capaz de adivinar lo que el nombre del subproceso debe ser, no hay garantía de que va a ser el mismo nombre en todas las plataformas de tiempo de ejecución y las versiones de Java. Cosas que necesitará
versión de Java Runtime Environment SE 6 o superior
Mostrar más instrucciones
1
Crear el marco para una clase de aplicaciones Java llamado "Find ". Simplemente proporcione un método main () vacío como punto de partida .
Public class
Encuentre {
públicos void ( String args [ ] ) { static
}
}
2
Crear un objeto Runnable e hilo para que tenga algo de encontrar. Nombre del hilo " Sleeper " , proporcionando un segundo argumento al constructor Thread, donde el primer argumento es la referencia Runnable . Después de crear el tema , empezar llamando a su método start () . El código siguiente comienza la definición del método principal ha quedado vacío () :
corredor Runnable = new Runnable () { try
pública void run () { {
Thread.sleep ( 50000) ;
} catch ( InterruptedException e) {
//ignore
} } < br >
} ;
Thread t = new Thread ( corredor, "Sleeper ");
t.Start ();
3
Encontrar el hilo con la ayuda de ThreadGroup . Todos los temas pertenecen a un ThreadGroup . Estos grupos de sentarse en un árbol en el que todos los grupos tienen un nodo padre ( y nodos hijos ) , a excepción de la raíz del árbol , que no tiene padre . Suponiendo que el hilo de encontrar no está en ThreadGroup del subproceso actual , subir a la cima del árbol mirando a la matriz del grupo . De esta manera, cuando usted va a encontrar el hilo "Sleeper " , usted sabrá que usted lo ha encontrado ya todas las discusiones activas serán los niños de la rosca padre supremo .
Tema currentThread Thread.currentThread = ( ) ;
grupo ThreadGroup = currentThread.getThreadGroup ();
while ( group.getParent () = null ) {
grupo
= group.getParent (); !
}
4
Utilice el método de ThreadGroup agrupar todos los hilos de los niños de esta super padre enumerate (). El método almacena los hilos activos en una matriz
int activeCount = group.activeCount ( ) .
ActiveThreads Tema [ ] = new Thread [ activeCount 5 ] ;
int ActualCount = group.enumerate ( activeThreads ) , - " . Sleeper "
5
Utilice la matriz activeThreads para ayudar a encontrar el hilo que falta aquí , el que marcó Una vez encontrado, use el DumpStack () para proporcionar un stacktrace de la rosca :
Tema encontrado = null;
for (int i = 0 ; i < ActualCount , i + +) {
if ( "Sleeper " es igual a ( activeThreads [ i ] getName ()) . ). {
encontró activeThreads = [ i];
break;
< p >} }
if ( encontrado = null ) {
found.dumpStack (); }
6 < p> En la línea de cierre a su método main (), dice que el sistema para salir fuera de la memoria :
System.exit ( 0 ) ;
7
compilar y ejecutar el programa . Mientras que los números de línea en el seguimiento de la pila podría ser levemente diferente basado en cosas como paréntesis, estilo, todos ellos deben proporcionar el mismo rendimiento en general
java.lang.Exception : . Seguimiento de la pila
en java . lang.Thread.dumpStack ( Thread.java : 1206 )
en Find.main ( Find.java : 31 )