2012-03-26 11 views
9

¿Existen herramientas disponibles para rastrear la creación y la duración de los hilos de Java? Yo estaría interesado en todo lo siguiente:Seguimiento de la creación y duración del hilo Java

  • La pila de llamadas, que llama nuevo Thread()
  • La pila de llamadas, que llama a start()
  • La vida útil del método run()
+1

¿Es una opción de subclases en su entorno particular? – Java42

Respuesta

4

No conozco ningún framework como este. Ciertamente podría subclasificar la clase Thread y almacenar esta información por su cuenta como la siguiente. Sin embargo, esto no hará un seguimiento de Thread s que se asignan en otras clases, como Executor s, etc ..

public class MyThread extends Thread { 
     StackTraceElement[] constructorTrace; 
     StackTraceElement[] startTrace; 
     long runStartTimeMillis; 
     long runFinishTimeMillis; 

     // you'll need to duplicate the constructors you need 
     public MyThread() { 
     super(); 
     constructorTrace = Thread.currentThread().getStacktrace(); 
     } 

     @Override 
     public void start() { 
     super.start(); 
     startTrace = Thread.currentThread().getStacktrace(); 
     } 

     @Override 
     public void run() { 
     runStartTimeMillis = System.currentTimeMillis(); 
     super.run(); 
     runFinishTimeMillis = System.currentTimeMillis(); 
     } 
    } 
+0

También puede usar 'Thread.currentThread(). GetStacktrace()' y 'System.nanoTime()' para el tiempo. También puede almacenar el 'nuevo Throwable' y solo tomar el StackTrace si lo necesita. –

+0

Gracias @Peter re: 'Thread.getStacktrace()'. Me olvide de eso. La stacktrace se completa con el constructor 'Throwable', por lo que no creo que se guarde nada. – Gray

+0

La matriz de elementos de seguimiento de la pila no se llena hasta que se la llama por primera vez. –

0

VisualVM ahora (*) tiene una pestaña para roscas

enter image description here

(*) No está seguro ya que cuando

Cuestiones relacionadas