文档章节

线程入门——捕获异常

E
 Elva_xxxx
发布于 2017/09/06 16:02
字数 306
阅读 15
收藏 0

示例:

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());
    }

}

输出结果:

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

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

© 著作权归作者所有

共有 人打赏支持
E
粉丝 1
博文 17
码字总数 7592
作品 0
杭州
私信 提问
用Thread中的UncaughtExceptionHandler来处理未捕获的异常

Java中在处理异常的时候,通常的做法是使用try-catch-finally来包含代码块,但是Java自身还有一种方式可以处理——使用UncaughtExceptionHandler。它能检测出某个线程由于未捕获的异常而终结...

摆渡者
2016/12/02
469
2
《实战Java高并发程序设计》读书笔记

有助于提高锁性能的几点建议 1、减少锁持有的时间——–只在必要时进行同步 2、减小锁的粒度 ConcurrentHashMap(只有获取全局信息的方法调用不频繁时,这种方法才能真正意义上提高系统吞吐量...

大黄有故事
2017/07/13
0
0
教程:一起学习Hystrix--Hystrix断路器配置及使用场景

目录 Hystrix本系列博文 如何配置以及调整断路器 预料中的抖动和失败 潜在风险 声明 Hystrix本系列博文 以下为博主写Hystrix系列的文章列表如下: 点击查看 Hystrix入门 点击查看 Hystrix命令...

java_龙
05/27
0
0
Java并发编程实战--笔记二

第5章:基础构建模块      ConcurrentHashMap 与其他并发容器一起增强了同步容器类:他们提供的迭代器不会抛出 ConcurrentModificationException ,因此不需要在迭代过程中对容器加锁。 ...

xunzaosiyecao
2017/10/13
0
0
不学无数——InterruptedException异常

InterruptedException异常 在了解InterruptedException异常之前应该了解以下的几个关于线程的一些基础知识。 线程的状态 线程在一定的条件下会发生状态的改变,下面是线程的一些状态 初始(NE...

不学无数的程序员
11/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

tomcat线程模型

Connector结构 BIO模式 NIO模式

grace_233
27分钟前
1
0
Javascript

变量定义 以$,_,字母开头 大小写敏感 var 关键字声明变量 声明未赋值undefined 数据类型 字符串,数字,布尔,数组,NULL,undefined 变量均为对象 函数 无默认值 var声明的是局部变量 函数外声明...

关元
29分钟前
1
0
文件系统、服务、防火墙、SELINUX——安全四大金刚

一提到安全,大家都会想到防火墙,和文件系统权限。而实际工作环境中,我们在Linux的安全配置,会涉及到四个级别。我们思考一个场景,你要在百度盘中存放一个文件,这个动作需要考虑下面四个...

Linux就该这么学
30分钟前
1
0
从源码角度理解Java设计模式——门面模式

一、门面模式介绍 门面模式定义:也叫外观模式,定义了一个访问子系统的接口,除了这个接口以外,不允许其他访问子系统的行为发生。 适用场景:子系统很复杂时,增加一个接口供外部访问。 优...

我叫刘半仙
39分钟前
2
0
新鲜出炉,2019最新大厂面试题总汇!

在这个互联网技术快速迭代的时代,每个程序员都知道技术对于职业发展的重要性,那些技术好的程序员不仅薪资高,而且大多数集中在一线互联网企业工作,让人感觉非常高大上的同时,也想去大厂做...

Java架构资源分享
48分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部