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

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

  • 调用新线程()的调用堆栈
  • 调用start()的调用堆栈
  • run()方法的生命周期

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

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

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

Java Live Thread Analyzer

我在这里写了关于这个工具的博客。

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

在此处输入图像描述

(*)从那以后不确定