美文网首页
7.捕获线程中的运行时异常

7.捕获线程中的运行时异常

作者: nieniemin | 来源:发表于2021-08-02 22:03 被阅读0次

Java API中为我们提供了一个用于捕获线程内部运行时异常的接口UncaughtExceptionHandler ,通过实现这个接口并给线程指定异常捕获器就可以实现捕获线程中的运行时异常。

public class UncaughtException {

 private final static  int A = 10;
 private final static  int B = 0;
 public static void main(String[] args) {
 Thread thread =  new Thread(()-> {
 // 指定一个算数异常java.lang.ArithmeticException: / by zero
 int result = A / B;
 System.out.println("result:" + result);
 });

 // 调用当前线程的setUncaughtExceptionHandler方法,捕获线程中的运行时异常
 thread.setUncaughtExceptionHandler((t, e) -> {
 System.out.println(t);
 System.out.println(e);
 });
 thread.start();
 }
}

***********************************************
Thread[Thread-0,5,main]
java.lang.ArithmeticException: / by zero

Thread还提供了一个Thread.currentThread().getStackTrace()方法,返回一个表示该线程堆栈转储的堆栈跟踪元素数组。
如果该线程尚未启动或已经终止,则该方法将返回一个零长度数组。如果返回的数组不是零长度的,则其第一个元素代表堆栈顶,它是该序列中最新的方法调用。最后一个元素代表堆栈底,是该序列中最旧的方法调用。

public class UncaughtException {

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

 public static void test() {

 StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();

 Arrays.asList(stackTrace).stream()
 .forEach(e-> {
 Optional.of("classname:" + e.getClassName()
 + "\n methoname:" + e.getMethodName()
 + "\n linenumber:" + e.getLineNumber()
 + "\n filename:" + e.getFileName())
 .ifPresent(System.out::println);
 });
 }

}

**********************************************************************
classname:java.lang.Thread
 methoname:getStackTrace
 linenumber:1556
 filename:Thread.java
classname:uncaughtex.UncaughtException
 methoname:test
 linenumber:34
 filename:UncaughtException.java
classname:uncaughtex.UncaughtException
 methoname:main
 linenumber:29
 filename:UncaughtException.java

参考:https://blog.csdn.net/qq_32907195/article/details/106852879

相关文章

  • 7.捕获线程中的运行时异常

    Java API中为我们提供了一个用于捕获线程内部运行时异常的接口UncaughtExceptionHandler...

  • Java多线程: 如何捕获多线程中的异常

    你处理过多线程中异常吗?如何捕获多线程中发生的异常?捕获子线程的异常与捕获当前线程的异常一样简单吗? 除了try ...

  • 2019-12-20

    1、多线程中怎么捕获子线程中的异常?这个问题大家会经常遇到,子线程在执行过程中抛出了异常,但是主线程并没有捕获到。...

  • SprnigMVC的统一异常处理

    我们知道,系统中异常包括:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息...

  • SpringMVC中的统一异常处理

    系统中异常包括:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主...

  • 自定义CrashHandler

    UncaughtExceptionHandler 为了捕获没有被捕获的异常,包括运行时异常,执行错误(内存溢出等)...

  • SpringMvc异常处理机制

    系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主...

  • 多线程的异常和事务

    子线程中的异常在主线程中是不可以catch的在spring中主线程有事务,那么子线程中有事务么? 捕获异常 我们使...

  • 异常使用规范

    (一) 异常处理 【强制】不要捕获 Java 类库中定义的继承自 RuntimeException 的运行时异常类...

  • JAVA多线程

    1、主线程怎么捕获子线程的异常 因此,异常一定要在线程内部消化。也就是说主线程无法捕获子线程的异常; 2、现在有T...

网友评论

      本文标题:7.捕获线程中的运行时异常

      本文链接:https://www.haomeiwen.com/subject/etojvltx.html