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)
  • 相关阅读:
    命名对象继承2-验证Open*命名对象安全属性的传递
    命名对象继承1-验证Create*命名对象安全属性的传递
    讨论c/c++计算小数的精度问题
    隐藏进程名
    一个函数重载问题
    02-Python基础之列表
    01-Python基础之字符串
    django 实用工具dj-database-url 快速配置数据库
    Gerrit安装配置
    关于数学的摘抄
  • 原文地址:https://www.cnblogs.com/myzhijie/p/4835638.html
Copyright © 2011-2022 走看看