2012-03-26 12 views
9

Esistono strumenti per tracciare la creazione e la durata dei thread Java? Sarei interessato a tutti i settori seguenti:Tracciamento della creazione e durata del thread Java

  • Lo stack di chiamate che chiama new Thread()
  • Lo stack di chiamate che chiama start()
  • La durata del metodo run()
+1

Is sottoclassi un'opzione in un ambiente particolare? – Java42

risposta

4

Non conosco nessun quadro come questo. È certamente possibile sottoclasse la classe Thread e memorizzerà queste informazioni come segue. Questo però non tiene traccia Thread s che vengono allocati in altre classi, come Executor s, ecc ..

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

Puoi anche usare 'Thread.currentThread(). GetStacktrace()' e 'System.nanoTime()' per i tempi. Puoi anche solo memorizzare il 'nuovo Throwable' e solo prendere StackTrace se ne hai bisogno. –

+0

Grazie a @Peter re: 'Thread.getStacktrace()'. L'ho dimenticato. Lo stacktrace è compilato nel costruttore 'Throwable' quindi non penso che salvi nulla. – Gray

+0

L'array di elementi di tracciamento dello stack non viene effettivamente riempito finché non viene chiamato per la prima volta. –

0

VisualVM ora (*) ha una scheda per le discussioni

enter image description here

(*) Non sono sicuro da quando

Problemi correlati