在run方法中,如何查找从哪里开始调用?

Apu*_*ngh 2 java multithreading

我正在调试一些代码.我的调试器显示代码的来源来自Thread.run().我需要知道调用Thread.start()代码的哪一部分!有没有办法找到这个?

Old*_*eon 8

您可以使用new Throwable().getStackTrace()获得完整的堆栈跟踪.要获得start堆栈,您必须扩展Thread,实际需要的几次之一(主要使用Runnable是首选).

class C extends Thread {
    StackTraceElement[] constructed;
    StackTraceElement[] started;

    public C() {
        constructed = new Throwable().getStackTrace();
    }

    @Override
    public void run() {
        // Your suuff.
    }

    @Override
    public synchronized void start() {
        started = new Throwable().getStackTrace();
        super.start();
    }

}
Run Code Online (Sandbox Code Playgroud)