线程栈获取
/**
* 线程栈和线程异常处理
* @author ydy
* */
public class ThreadStackTest {
public static void main(String[] args) {
testStack();
}
/**
* 测试线程栈
* */
private static void testStack() {
Thread currentThread = Thread.currentThread();
StackTraceElement[] stackTrace = currentThread.getStackTrace();//获取线程栈中元素
for(StackTraceElement element:stackTrace) {
String fileName = element.getFileName();
String methodName = element.getMethodName();
System.out.println("fileName:"+fileName);
System.out.println("methodName:"+methodName);
}
}
}
输出结果
fileName:Thread.java
methodName:getStackTrace
fileName:ThreadStackTest.java
methodName:testStack
fileName:ThreadStackTest.java
methodName:main
线程异常处理器 UncaughtExceptionHandler
package com.ydy.thread;
import java.lang.Thread.UncaughtExceptionHandler;
import org.apache.commons.lang3.exception.ExceptionUtils;
/**
* 线程异常处理
* @author ydy
* */
public class ThreadExceptionTest {
public static void main(String[] args) {
Runnable runnable=new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
int i=1/0;
}
};
Thread thread=new Thread(runnable);
thread.setUncaughtExceptionHandler(new UncaughtExceptionHandlerDefault());
thread.start();
}
}
class UncaughtExceptionHandlerDefault implements UncaughtExceptionHandler{
@Override
public void uncaughtException(Thread t, Throwable e) {
// TODO Auto-generated method stub
System.out.println("异常线程名称:"+t.getName());
System.out.println("异常信息:"+ExceptionUtils.getStackTrace(e));
}
}
输出信息
异常线程名称:Thread-0
异常信息:java.lang.ArithmeticException: / by zero
at com.ydy.thread.ThreadExceptionTest$1.run(ThreadExceptionTest.java:17)
at java.lang.Thread.run(Thread.java:745)