java多线程中unchecked 异常的处理UncaughtExceptionHandler
来源:互联网 发布:天猫运营数据分析报告 编辑:程序博客网 时间:2024/05/21 09:24
Thread的run方法是不抛出任何检查型异常(checked exception)的,但是它自身却可能因为一个异常而被终止,导致这个线程的终结。最麻烦的是,在线程中抛出的异常即使在主线程中使用try...catch也无法截获,因此可能导致一些问题出现,比如异常的时候无法回收一些系统资源,或者没有关闭当前的连接等等。
主线程之所以不处理子线程抛出的RuntimeException,是因为线程是异步的,子线程没结束,主线程可能已经结束了。
UncaughtExceptionHandler名字意味着处理未捕获的异常。更明确的说,它处理未捕获的运行时异常。Java编译器要求处理所有非运行时异常,否则程序不能编译通过。这里“处理”的是方法里throws子句声明的异常或在try-catch块里的catch子句的异常。
package demo;import java.lang.Thread.UncaughtExceptionHandler;public class ThreadTest{ public static void main(String[] args) { ThreadA a = null; try { ErrHandler handle = new ErrHandler(); a = new ThreadA(); a.setUncaughtExceptionHandler(handle);// 加入定义的ErrHandler a.start(); // 线程的run抛出的RuntimeException异常无法抓到 // a.run(); 普通方法抛出RuntimeException异常可以抓到 } catch (Exception e) { System.out.println("catch RunTimeException a"); // 不起作用,但是Exception已经交给handle处理 } // 普通线程即使使用try...catch也无法捕获到抛出的异常 try { ThreadB b = new ThreadB(); b.start(); } catch (Exception e) { System.out.println("catch RunTimeException b"); // 不起作用 } }}/** * 自定义的一个UncaughtExceptionHandler */class ErrHandler implements UncaughtExceptionHandler{ /** * 这里可以做任何针对异常的处理,比如记录日志等等 */ public void uncaughtException(Thread a, Throwable e) { System.out.println("This is:" + a.getName() + ",Message:" + e.getMessage()); e.printStackTrace(); }}/** * 拥有UncaughtExceptionHandler的线程 */class ThreadA extends Thread{ public ThreadA() { } public void run() { double i = 12 / 0;// 抛出ArithmeticException的RuntimeException型异常 }}/** * 普通线程 */class ThreadB extends Thread{ public ThreadB() { } public void run() { try { double i = 12 / 0;// 抛出ArithmeticException的RuntimeException型异常 } catch (RuntimeException e) { throw e; } }}
- java多线程中unchecked 异常的处理UncaughtExceptionHandler
- java多线程中unchecked 异常的处理UncaughtExceptionHandler
- Java多线程中异常的处理UncaughtExceptionHandler
- Java基础---java线程unchecked异常的处理UncaughtExceptionHandler
- 0018 Java多线程中UncheckedException异常处理UncaughtExceptionHandler【基础】
- java中checked和unchecked 异常处理的例子
- Android中使用UncaughtExceptionHandler来处理未捕获的异常
- UncaughtExceptionHandler:java未捕获的异常/错误默认处理方式
- java线程处理异常Thread.UncaughtExceptionHandler
- Java异常处理之处理未捕获的异常及UncaughtExceptionHandler的使用
- java中checked和unchecked异常的区别
- java 中利用UncaughtExceptionHandler捕获异常
- 全局异常处理UncaughtExceptionHandler
- 异常处理UncaughtExceptionHandler
- JAVA 的checked异常和unchecked异常
- JAVA 的checked异常和unchecked异常
- JAVA 的checked异常和unchecked异常
- JAVA 的checked异常和unchecked异常
- solaris10上安装top
- 数独游戏破解
- 电子商务网站之订单转化率思维导图
- 用通配符进行过滤
- 对数据进行DNS加密
- java多线程中unchecked 异常的处理UncaughtExceptionHandler
- 救命!李宁也要进军地产
- debian虚拟IP配置
- MySQL Error Code:1414 经验一则
- android Spinner
- ERROR 1449 (HY000): The user specified as a definer ('db'@'%') does not exist
- oracle10.2.0.1升级到10.2.0.4报错
- 即时通讯开发(逐行、隔行扫描)
- 虚拟机桥接方式上网