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

时间:2016-01-20 16:27:18

标签: java multithreading

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

2 个答案:

答案 0 :(得分:7)

您可以使用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();
    }

}

答案 1 :(得分:0)

我发现了使用Eclipse或任何其他IDE的粗略有效的技术。假设你的Runnable或Callable中有一个断点,并且线程在那里暂停...没有双人能够立即知道从哪里开始调用... 但是,只需右键单击Runnable / Callable构造函数,然后点击显示调用层次结构' ..它就是!!你会知道Runnable / Callable的构建地点......然后就开始调用它! 在Eclipse中,如果Runnable / Callable没有no-arg构造函数,请右键单击类名并选择“显示调用层次结构' ...问题解决了......这是多么轻松。”