跟踪Java线程创建和生命周期

时间:2012-03-26 15:05:31

标签: java multithreading

是否有可用的工具来跟踪Java线程的创建和生命周期?我会对以下所有内容感兴趣:

  • 调用new Thread()
  • 的调用堆栈
  • 调用start()
  • 的调用堆栈
  • run()方法的生命周期

3 个答案:

答案 0 :(得分:4)

我不知道这样的任何框架。您当然可以继承Thread类,并将这些信息存储在您自己中,如下所示。但是,这不会跟踪在其他类中分配的Thread,例如Executor s等。

  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();
      }
  }

答案 1 :(得分:4)

我已经编写并发布了一个开源工具来回答这个问题。

Java Live Thread Analyser

我在博客上发布了here工具。

答案 2 :(得分:0)

VisualVM now(*)有一个线程选项卡

enter image description here

(*)从那时起不确定