Tecnología

Inicio

Cómo encontrar un hilo de Java en tiempo de ejecución

El arte de encontrar hilos en tiempo de ejecución implica dos clases de Java, hilo y ThreadGroup. Además, hay que recordar el nombre de su hilo cuando se crea. De lo contrario, si no el nombre de su hilo, usted está confiando en el mecanismo de nombres predeterminado para roscas integradas en Java, y mientras que usted puede ser capaz de adivinar cuál debe ser el nombre del hilo, no hay garantía de que va a ser el mismo nombre en todos todas las plataformas de tiempo de ejecución y las versiones de Java.

Instrucciones

1 Crear el marco para una clase de aplicaciones Java llamado "Buscar". Simplemente proporcione un método vacío main () como punto de partida.

Buscar public class {

void Main (args String []) {public static

}

}

2 Crear un objeto Ejecutable e hilo para que tenga algo de encontrar. Nombre del hilo "durmiente" al proporcionar un segundo argumento del constructor de Hilo, en el que el primer argumento es la referencia Ejecutable. Después de crear el hilo, iniciarlo llamando a su método start (). El siguiente código comienza la definición del método main () que ha quedado vacío:

Runnable runner = new Runnable() {

public void run () {

tratar {

Thread.sleep (50000);

} Catch (InterruptedException e) {

// ignorar

}

}

};

Tema t = new Thread (corredor, "durmiente");

t.Start ();

3 Encontrar el hilo con la ayuda de ThreadGroup. Todas las roscas pertenecen a una ThreadGroup. Estos grupos se sientan 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 se encuentra no está en ThreadGroup del hilo actual, subir a la parte superior del árbol mirando a la matriz del grupo. De esta manera, cuando se va a encontrar el hilo "durmiente", sabrá que lo ha encontrado ya que todos los hilos activos serán hijos de la rosca padre supremo.

Thread currentThread = Thread.currentThread();

ThreadGroup grupo currentThread.getThreadGroup = ();

mientras que (group.getParent ()! = null) {

group = group.getParent ();

}

4 Utilice el método de enumeración () de ThreadGroup agrupar todos los hilos de los niños de este padre estupendo. El método almacena los hilos activos en una matriz.

int activeCount = group.activeCount();

activeThreads rosca [] = new Thread [activeCount + 5];

int = actualCount group.enumerate (activeThreads);

5 Utilice la matriz activeThreads para ayudar a encontrar el hilo que falta - aquí, el marcado "durmiente". Una vez encontrado, utilice el método dumpStack () para proporcionar un stacktrace de la rosca:

Thread found = null;

for (int i = 0; i & lt; actualCount; i ++) {

si (.equals "durmiente" (activeThreads [i] .getName ())) {

Encontrado = activeThreads [i];

descanso;

}

}

si (encontrado! = null) {

found.dumpStack ();

}

6 A medida que la línea de cierre a su método main (), indicar al sistema que salir fuera de la memoria:

System.exit (0);

7 Compilar y ejecutar su programa. Mientras que los números de línea en el seguimiento de la pila podría ser ligeramente diferente en base a cosas como el estilo de paréntesis, todos ellos deben proporcionar el mismo resultado general.

java.lang.Exception: Seguimiento de la pila

at java.lang.Thread.dumpStack(Thread.java:1206)

en Find.main (Find.java:31)