博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程入门——捕获异常
阅读量:5877 次
发布时间:2019-06-19

本文共 1749 字,大约阅读时间需要 5 分钟。

hot3.png

示例:

import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.ThreadFactory;/** * Created by Administrator on 2017/9/6. *///任务class ExceptionThread2 implements Runnable {    @Override    public void run() {        Thread t = Thread.currentThread();        System.out.println("run() by" + t);        System.out.println(                "eh = " + t.getUncaughtExceptionHandler()        );        throw new RuntimeException();    }}//异常处理class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {    @Override    public void uncaughtException(Thread t, Throwable e) {        System.out.print("caught" + e);    }}//以线程方式启动任务class HandlerThreadFactor implements ThreadFactory {    public Thread newThread(Runnable r) {        System.out.println(this + " creating new Thread");        Thread t = new Thread(r);        System.out.println("created " + t);        t.setUncaughtExceptionHandler(new MyUncaughtExceptionHandler());        System.out.println(                "eh = " + t.getUncaughtExceptionHandler()        );        return t;    }}public class CaptureUncaughtException {    public static void main(String[] args){        ExecutorService exec = Executors.newCachedThreadPool(new HandlerThreadFactor());        exec.execute(new ExceptionThread2());    }}

输出结果:

155617_ZZch_560971.png

由于线程的本质特性,使得你不能捕获从线程中逃逸的异常。一旦异常逃出任务的run()方法之外,它就会向外传播到控制台,除非你采取特殊的步骤捕获这些错误的异常。可以用Executor来解决这个问题。

Thread.UncaughtException-Handler是Java SE中的新接口,它允许你在每个Thread对象上都附着一个异常处理器,Thread.UncaughtExceptionHandler.uncaughtException()会在线程因未捕获的异常而临近死亡时被调用,为了使用它,创新了一个新类型的ThreadFactory,它将在每个新创建的Thread对象上附着一个Thread.UncaughtExceptionHandler。将这个工厂传递给Executors创建新的ExecutorService的方法。

转载于:https://my.oschina.net/u/560971/blog/1530078

你可能感兴趣的文章
详解Linux中Load average负载
查看>>
HTTP 协议 Cache-Control 头——性能啊~~~
查看>>
丢包补偿技术概述
查看>>
PHP遍历文件夹及子文件夹所有文件
查看>>
WinForm程序中两份mdf文件问题的解决
查看>>
【转】唯快不破:创业公司如何高效的进行产品研发管理
查看>>
程序计数器、反汇编工具
查看>>
Android N: jack server failed
查看>>
007-Shell test 命令,[],[[]]
查看>>
关于Linux系统使用遇到的问题-1:vi 打开只读(readonly)文件如何退出保存?
查看>>
pandas 按照某一列进行排序
查看>>
在WPF中如何使用RelativeSource绑定
查看>>
Map的深浅拷贝的探究
查看>>
XSLT语法 在.net中使用XSLT转换xml文档示例
查看>>
如何将lotus 通讯簿导入到outlook 2003中
查看>>
WinForm 应用程序中开启新的进程及控制
查看>>
前端工程师的职业发展路线在哪?
查看>>
IOS 内存警告 Memory warning level
查看>>
[转]PAC Manager: Ubuntu 上强大的 SSH 帐号管理工具,可取代 SecureCRT_Miracle_百度空间...
查看>>
顺序容器 (2)string类型操作
查看>>