gpt4 book ai didi

java - 在新创建的线程中跟踪原始堆栈跟踪的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-30 06:36:47 25 4
gpt4 key购买 nike

在我工作的客户端程序中,我们将服务器调用分派(dispatch)给不同的线程,以不锁定 UI(相当于 SwingWorker)。

这是用一个模型类创建的,它继承了一个包含“更新”方法的抽象类,它正在准备新线程,并从这个新创建的线程中的抽象方法执行代码(加上其他调整)

它工作正常,但我的问题是在调试(或日志记录)时,很难跟踪到底是哪个方法调用了“更新”方法,因为堆栈跟踪以新线程的创建结束。

跟踪导致调用这个新线程的堆栈跟踪的正确方法是什么?理想情况下,以一种在调试器的堆栈导航器中显示的方式(在这种情况下来自 Eclipse) ; 这个想法是在初始上下文中轻松导航)。

最佳答案

通常堆栈跟踪不会跨线程,所以这会很棘手。但是,在您的 Worker 类的构造函数中,您可以使用...访问当前线程

Thread current = Thread.currentThread

然后您可以通过调用...获取该线程的当前堆栈跟踪

StackTraceElement[] currentStack = current.getStackTrace();

然后您可以将它存储在您的工作人员的一个实例变量中,并从您的调试器中查看它。这必须在控件传递到新线程之前完成,这就是为什么我建议在构造函数中这样做的原因。但是,在新线程的 start() 方法之前调用的任何方法都可以。

关于java - 在新创建的线程中跟踪原始堆栈跟踪的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4377463/

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