美文网首页
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.捕获线程中的运行时异常

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