文档章节

Java并发编程初级篇(七):捕获线程中的运行时异常

阿拉德大陆的魔法师
 阿拉德大陆的魔法师
发布于 2016/11/23 15:16
字数 423
阅读 33
收藏 2

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

public interface UncaughtExceptionHandler {
    /**
     * Method invoked when the given thread terminates due to the
     * given uncaught exception.
     * <p>Any exception thrown by this method will be ignored by the
     * Java Virtual Machine.
     * @param t the thread
     * @param e the exception
     */
    void uncaughtException(Thread t, Throwable e);
}

因为线程类的run()方法并不能抛出异常,所以如果不为线程指定UncaughtExceptionHandler,那么当遇到运行时异常的时候就会在控制台打印异常堆栈信息,并终止线程。

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        Integer.parseInt("ABC");
    }

    public static void main(String[] args) {
        Thread thread = new Thread(new MyRunnable(), "MyThread-1");
        //thread.setUncaughtExceptionHandler(new ExceptionHandler());
        thread.start();
    }
}

Exception in thread "MyThread-1" java.lang.NumberFormatException: For input string: "ABC"
	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 oschian.concurrency.section_07.MyRunnable.run(MyRunnable.java:9)
	at java.lang.Thread.run(Thread.java:745)

首先我们实现一个线程异常处理器,需要重写uncaughtException方法。

public class ExceptionHandler implements Thread.UncaughtExceptionHandler {
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        System.out.printf("ExceptionHandler: An exception has been captured.\n");
        System.out.printf("Thread: %s %s %s\n", t.getName(), e.getClass(), e.getMessage());
    }
}

接下来我们定义一个线程,在线程内部模拟一个运行时异常。使用setUncaughtExceptionHandler方法给这个线程指定异常处理器并启动线程。

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        Integer.parseInt("ABC");
    }

    public static void main(String[] args) {
        Thread thread = new Thread(new MyRunnable(), "MyThread-1");
        thread.setUncaughtExceptionHandler(new ExceptionHandler());
        thread.start();
    }
}

查看控制台你会发现异常处理器捕获了运行时异常并处理。

ExceptionHandler: An exception has been captured.
Thread: MyThread-1 class java.lang.NumberFormatException For input string: "ABC"

 

© 著作权归作者所有

共有 人打赏支持
阿拉德大陆的魔法师
粉丝 25
博文 91
码字总数 83019
作品 0
西城
程序员
私信 提问
Java学习系列文章:说说Java中的异常

在正常的程序设计中,程序异常处理是非常关键和重要的一部分。试想一个项目中没有一个好的异常处理,这个项目会怎么样? 什么是异常 异常其实是程序上的错误,包括程序逻辑错误和系统错误。比...

java高级架构牛人
06/29
0
0
Java 复习 —— 异常处理

前言 异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误...

learn_more
2015/08/21
0
0
Java程序员从笨鸟到菜鸟之(十二)java异常处理机制

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...el...

长平狐
2012/11/12
98
0
那些年,关于 Java 的那些事儿

版权声明:Follow your heart and intuition. https://blog.csdn.net/qq_35246620/article/details/78695893 温馨提示:本系列博文(含示例代码)已经同步到 GitHub,地址为「java-skills」,...

维C果糖
2017/12/02
0
0
java编程语言学习:异常处理

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰
06/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

NEO区块链-DAPP开发直通车-第零篇

什么是DAPP DAPP 是以太坊发明的词汇 Decentralized Application. 目前基于区块链技术开发的应用程序广泛的接受使用了这一名称。 NEL将为开发DAPP提供全面的服务 什么是NEL NEL是 “NewEcon...

NEO-FANS
1分钟前
0
0
可视化软件VisIt在Ubuntu18.04上的安装

可视化软件VisIt在Ubuntu18.04上的安装 参考文档及使用说明 1.下载 在官网下载页面下载合适版本的安装文件,Ubuntu有专用的 https://wci.llnl.gov/simulation/computer-codes/visit/executa...

佚文
7分钟前
0
0
GROUP BY GROUPING SETS

GROUPING SETS 子句是 SELECT 语句的 GROUP BY 子句的扩展。通过 GROUPING SETS 子句,您可采用多种方式对结果分组,而不必使用多个 SELECT 语句来实现这一目的。这就意味着,能够减少响应时...

hblt-j
16分钟前
2
0
selenium之表格的定位

真的勇士, 敢于直面惨淡的warning、 敢于正视淋漓的error 目录 被测试网页的HTML代码 1.遍历表格所有单元格 2.定位表格中的某个元素 3.定位表格中的子元素 总结 浏览器网页常常会包含各类表...

程序猿拿Q
21分钟前
1
0
adb命令启动展讯平台工厂模式

adb命令启动展讯工厂模式: adb shell am start com.sprd.engineermode/com.sprd.engineermode.EngineerModeActivity...

东街小霸王
22分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部