文档章节

线程入门——捕获异常

p
 pepper_09
发布于 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的方法。

© 著作权归作者所有

共有 人打赏支持
p
粉丝 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 复习 —— 异常处理

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

learn_more
2015/08/21
0
0
Java并发编程实战--笔记二

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

xunzaosiyecao
2017/10/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Mac OS X下Maven的安装与配置

Mac OS X 安装Maven: 下载 Maven, 并解压到某个目录。例如/Users/robbie/apache-maven-3.3.3 打开Terminal,输入以下命令,设置Maven classpath $ vi ~/.bash_profile 添加下列两行代码,之后...

TonyStarkSir
今天
3
0
关于编程,你的练习是不是有效的?

最近由于工作及Solution项目的影响,我在重新学习DDD和领域建模的一些知识。然后,我突然就想到了这个问题,以及我是怎么做的? 对于我来说,提升技能的项目会有四种: 纯兴趣驱动的项目。即...

问题终结者
今天
4
0
打开eclipse出现an error has occurred see the log file

解决方法: 1,打开eclipse安装目录下的eclipse.ini文件; 2,打开的文本文件最后添加一行 --add-modules=ALL-SYSTEM 3,保存重新打开Eclipse。...

任梁荣
昨天
4
0
搞定Northwind示例数据库,无论哪个版本的SQLServer都受用

Northwind数据库 从这里可以找到突破口: http://social.msdn.microsoft.com/Forums/zh-CN/Vsexpressvb/thread/8490a1c6-9018-40c9-aafb-df9f79d29cde 下面是MSDN: http://msdn2.microsoft......

QQZZFT
昨天
1
0
mysql主从同步,安装配置操作

准备 两台mysql服务,我这里准备了如下: 主库:192.168.176.128 从库:192.168.176.131 如何在Linux上安装mysql服务,请看https://blog.csdn.net/qq_18860653/article/details/80250499 操作...

小致dad
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部