有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java中的run方法,如何查找从何处调用start?

我正在调试一些代码。我的调试器显示代码的来源是线程。运行()。我需要知道代码线程的哪一部分。调用了start()!有办法找到答案吗


共 (2) 个答案

  1. # 1 楼答案

    可以使用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();
        }
    
    }
    
  2. # 2 楼答案

    我发现了一种使用Eclipse或任何其他IDE的粗糙而有效的技术。假设在Runnable或Callable中有一个断点,线程在那里暂停。。。没有人不知道start是从哪里来的,只需右键单击Runnable/Callable构造函数,然后单击“显示调用层次结构”。。就这样!!您将了解Runnable/Callable的构造位置。。然后就开始了
    在Eclipse中,如果Runnable/Callable没有参数构造函数,右键单击类名并选择“显示调用层次结构”。。问题解决了。。真是松了一口气