gpt4 book ai didi

Java - 如何从 Runnable 之前获取堆栈跟踪?

转载 作者:行者123 更新时间:2023-11-30 08:51:03 25 4
gpt4 key购买 nike

我在这里仔细查看了 SO“可能已经有了答案的问题”,很惊讶没有找到我要的东西......

当(例如)EDT 中发生异常时,或者您出于任何原因只想检查堆栈时,找到返回到 Runnable 的 run() 的堆栈是微不足道的。但是您将如何找到运行 Runnable 的线程(以及堆栈)?并着手寻找运行 that thread's Runnable 的线程(以及堆栈)...等等...

我知道 Thread.getAllStackTraces()... 但是如何确定这些线程中的哪一个称为“当前线程”?除了“被调用”不是正确的词...我的意思是运行当前线程。

最佳答案

当您启动新线程时,原来的线程已经开始做其他事情。在稍后的时间点获取该线程正在执行的操作的堆栈跟踪可能是无关紧要的。您想要的是在线程启动时捕获堆栈。

您可以做的是创建一个异常并在创建时传递给您的 Runnable。异常将包含直到创建可运行对象时的堆栈。

像这样:

ExecutorService executor = Executors.newSingleThreadExecutor();

public void foo() {
final Exception starterStackTrace = new Exception();
executor.execute(new Runnable () {

@Override
public void run() {
try {
// do stuff
} catch (Exception e) {
e.printStackTrace(); // Thread exception
starterStackTrace.printStackTrace(); // How thread was started
}
}
});
}

关于Java - 如何从 Runnable 之前获取堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30717523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com