Java 线程 getStackTrace() 方法



描述

Java Thread getStackTrace() 方法返回一个栈跟踪元素数组,表示该线程的栈转储。如果该线程尚未启动或已终止,则将返回一个零长度数组。

如果返回的数组长度不为零,则数组的第一个元素表示栈顶,它是序列中最新的方法调用。数组的最后一个元素表示栈底,它是序列中最旧的方法调用。

声明

以下是 java.lang.Thread.getStackTrace() 方法的声明

public StackTraceElement[] getStackTrace()

参数

返回值

此方法返回一个 StackTraceElement 数组,每个元素代表一个栈帧。

异常

SecurityException - 如果存在安全管理器并且其 checkPermission 方法不允许获取线程的堆栈跟踪。

示例:在单线程环境中获取 StackTrace

以下示例演示了 Java Thread getStackTrace() 方法的用法。在此程序中,我们创建了一个类 ThreadDemo。在 main 方法中,调用 ThreadDemo 实例方法 getStackTrace(),该方法依次检索当前线程并使用 getStackTrace() 获取堆栈跟踪并打印类名。

package com.tutorialspoint;

public class ThreadDemo {

   public static void main(String[] args) {
      new ThreadDemo().getStackTrace();
   }

   public void getStackTrace() {
      System.out.println(Thread.currentThread().getStackTrace()[3].getClassName());
   }
} 

输出

让我们编译并运行以上程序,这将产生以下结果:

com.tutorialspoint.ThreadDemo

示例:在多线程环境中获取 StackTrace

以下示例演示了 Java Thread activeCount() 方法的用法。在此程序中,我们通过实现 Runnable 接口创建了一个线程类 ThreadDemo。在构造函数中,使用 currentThread() 方法检索当前线程,并使用 new Thread 创建一个新线程。使用 getStackTrace() 获取堆栈跟踪并打印类名。

package com.tutorialspoint;

public class ThreadDemo implements Runnable {

   ThreadDemo() {     
      // thread created
      Thread t = new Thread(this, "Admin Thread");
      
      // this will call run() function
      t.start();

	  System.out.println(Thread.currentThread().getStackTrace()[2].getClassName());
   }

   public void run() {
      System.out.println("This is run() method");
   }

   public static void main(String args[]) {
      new ThreadDemo();
   }
}

输出

让我们编译并运行以上程序,这将产生以下结果:

This is run() method
com.tutorialspoint.ThreadDemo
java_lang_thread.htm
广告