跟踪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(*)有一个线程选项卡
(*)从那以后不确定