zoukankan      html  css  js  c++  java
  • JAVA线程全局异常处理

      大家平时写线程很多,但可能很少关注如何捕获线程的全局异常。其实jdk提供了两种捕获全局异常的方法,一种是基于整个线程类(staticsetDefaultUnaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)),一种基于线程的一个对象(setUncaughtExceptionHandler(Thread.UncaughtExceptionHander eh))。

      下面是基于线程的一个对象的示例:

      

    /**
     * 主线程
     */
    public class MainThread extends Thread implements Thread.UncaughtExceptionHandler {
    
        public static void main(String[] args){
            new MainThread().start();
        }
    
        public void run(){
            ChildThread child=new ChildThread();
            child.setUncaughtExceptionHandler(this);
            child.start();
        }
    
        /**
         * 获得子线程异常
         * @param t
         * @param e
         */
        @Override
        public void uncaughtException(Thread t, Throwable e) {
            System.out.println("以下为子线程异常:");
            e.printStackTrace();
        }
    }
    /**
     * 子线程
     */
    public class ChildThread extends Thread{
    
        public void run(){
            int a=Integer.parseInt("sdfdf");
        }
    }

    执行主线程的main方法启动子线程,此时主线程uncaughtException会捕获子线程的异常,执行结果如下:

    以下为子线程异常:
    java.lang.NumberFormatException: For input string: "sdfdf"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
        at java.lang.Integer.parseInt(Integer.java:492)
        at java.lang.Integer.parseInt(Integer.java:527)
        at net.hsh.util.ChildThread.run(ChildThread.java:9)
  • 相关阅读:
    npm run build无法打包的可能原因 npm ERR! missing script: build
    java的Scanner类的close()方法引来的故事
    Markdown语法1
    MarkdownPad2破解安装&使用
    MarkDown语法5
    Markdown语法2
    Markdown0
    Sublime Text配置anaconda环境
    解决:Tensorflowgpu中的Could not load dynamic library ‘cudart64_101.dll‘; dlerror: cudart64_101.dll not found
    Markdown语法4
  • 原文地址:https://www.cnblogs.com/myzhijie/p/4835638.html
Copyright © 2011-2022 走看看