Java多线程编程核心技术(第3版)
上QQ阅读APP看书,第一时间看更新

1.7 方法StackTraceElement[] getStackTrace()

public StackTraceElement[] getStackTrace()方法的作用是返回一个表示该线程的堆栈跟踪元素数组。如果该线程尚未启动或已经终止,则该方法将返回一个零长度数组。如果返回的数组不是零长度的,则其第一个元素代表堆栈顶,它是该数组中最新的方法调用。最后一个元素代表堆栈底,是该数组中最旧的方法调用。

创建测试用的代码如下:


package test1;

public class Test1 {

    public void a() {
        b();
    }

    public void b() {
        c();
    }

    public void c() {
        d();
    }

    public void d() {
        e();
    }

    public void e() {
        StackTraceElement[] array = Thread.currentThread().getStackTrace();
        if (array != null) {
            for (int i = 0; i < array.length; i++) {
                StackTraceElement eachElement = array[i];
                System.out.println("className=" + eachElement.getClassName() + 
                    " methodName="
                        + eachElement.getMethodName() + " fileName=" + eachElement.
                            getFileName() + " lineNumber="
                        + eachElement.getLineNumber());
            }
        }

    }

    public static void main(String[] args) {
        Test1 test1 = new Test1();
        test1.a();
    }
}

程序运行结果如下所示。


className=java.lang.Thread methodName=getStackTrace fileName=Thread.java lineNumber=1559
className=test1.Test1 methodName=e fileName=Test1.java lineNumber=22
className=test1.Test1 methodName=d fileName=Test1.java lineNumber=18
className=test1.Test1 methodName=c fileName=Test1.java lineNumber=14
className=test1.Test1 methodName=b fileName=Test1.java lineNumber=10
className=test1.Test1 methodName=a fileName=Test1.java lineNumber=6
className=test1.Test1 methodName=main fileName=Test1.java lineNumber=36

在控制台中输出当前线程的堆栈跟踪信息。

可以在catch{}代码块中使用public StackTraceElement[] getStackTrace()方法获得出现异常的堆栈调用顺序并记录日志,请自行进行测试。