如何在 Java 9 中使用线程获取堆栈跟踪?
javaobject oriented programmingprogramming更新于 2025/10/23 7:40:17
Java 9 添加了 StackWalker 类,以提供用于访问当前线程堆栈的标准 API。在以前的 Java 版本中,我们可以使用 Throwable::getStackTrace、Thread::getStackTrace 和 SecurityManager:: GetClassContext 提供的方法来获取线程堆栈。
Thread.getStackTrace() 方法将返回一个表示线程堆栈转储的堆栈跟踪元素数组(StackTraceElement[])。数组的第一个元素表示堆栈的顶部,它可以是序列中的最后一个方法调用,数组的最后一个元素表示堆栈的底部,它可以是序列中的第一个方法调用。
语法
public StackTraceElement[] getStackTrace()
示例
import java.lang.StackWalker.Option;
public class GetStackTraceTest {
public static void main(String args[]) {
GetStackTraceTest.testPrintCurrnentStackTrace();
GetStackTraceTest.testShowReflectFrames();
}
// get StackTrace using Thread
public static void testPrintCurrnentStackTrace() {
StackTraceElement[] stack = Thread.currentThread().getStackTrace();
for(StackTraceElement element : stack) {
System.out.println(element);
}
}
// SHOW_REFLECT_FRAMES
public static void print(StackWalker stackWalker) {
stackWalker.forEach(stackFrame -> System.out.printf("%6d| %s -> %s %n",
stackFrame.getLineNumber(), stackFrame.getClassName(), stackFrame.getMethodName()));
}
public static void testShowReflectFrames() {
final StackWalker stackWalker = StackWalker.getInstance(Option.SHOW_REFLECT_FRAMES);
print(stackWalker);
}
}
输出
java.base/java.lang.Thread.getStackTrace(Thread.java:1654) GetStackTraceTest.testPrintCurrnentStackTrace(GetStackTraceTest.java:10) GetStackTraceTest.main(GetStackTraceTest.java:5) 17| GetStackTraceTest -> print 25| GetStackTraceTest -> testShowReflectFrames 6| GetStackTraceTest -> main
相关文章
有用资源
java 参考教程 - 该教程包含有关 java 的更多信息:https://www.cainiaomax.com/java/

