线程捕获异常:

情况下,我们在main()方法里是捕捉不到线程的异常的,比例如以下面代码:

public class ExceptionThread implements Runnable{
@Override
public void run() {
throw new NullPointerException();
} public static void main(String[] args) {
ExecutorService executorService = Executors.newCachedThreadPool();
try {
System.out.println("运行线程");
executorService.execute(new ExceptionThread());
} catch (Exception e) {
e.printStackTrace();
System.out.println("捕捉异常");
}
}
}

上述代码并不能在main方法里捕捉线程异常,那么我们怎么才干捕捉到线程的异常信息呢?

以下我们看这段代码

/**
* 定义异常线程内容
*/
class MyExceptionThread implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread t, Throwable e) {
// 捕捉异常后的业务处理放在这里
System.out.println("捕捉的异常信息例如以下");
System.out.println(e);
}
} /**
* 定义异常线程工厂
*/
class ExceptionThreadFactory implements ThreadFactory {
@Override
public Thread newThread(Runnable r) {
Thread thread = new Thread(r);
// 此处是捕捉异常的设置。
thread.setUncaughtExceptionHandler(new MyExceptionThread());
return thread;
}
} /**
* 执行线程
*/
class ExceptionThread2 implements Runnable{
@Override
public void run() {
try {
Thread.sleep(1000l);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 抛出异常
throw new NullPointerException();
} public static void main(String[] args) {
// 通过我们自己写的ExceptionThreadFactory线程工厂,构造线程池
ExecutorService executorService = Executors.newCachedThreadPool(new ExceptionThreadFactory());
try {
System.out.println("执行线程");
// 启动三个线程
executorService.execute(new ExceptionThread2());
executorService.execute(new ExceptionThread2());
executorService.execute(new ExceptionThread2());
} catch (Exception e) {
e.printStackTrace();
System.out.println("捕捉异常");
}
}
}

上面的输出结果是

运行线程
捕捉的异常信息例如以下
java.lang.NullPointerException
捕捉的异常信息例如以下
java.lang.NullPointerException
捕捉的异常信息例如以下
java.lang.NullPointerException

得出的结论是:main()该方法仍然没有捕捉到异常的线程,当然,这个设置是合理的。现在每个线程都有自己的异常处理机制,怎么办呢,句子,创建一个线程时,该语句是好的~

收工。

Java线程学习笔记(两) 线程异常处理的更多相关文章

  1. Java多线程学习笔记之一线程基础

    1.进程与线程 1.1 进程:是正在运行中的程序的实例,一个运行中idea就是一个进程.进程有它自己的地址空间,一般情况下,包括文本区域(text region).数据区域(data region)和 ...

  2. Java基础学习笔记十八 异常处理

    什么是异常?Java代码在运行时期发生的问题就是异常. 在Java中,把异常信息封装成了一个类.当出现了问题时,就会创建异常类对象并抛出异常相关的信息(如异常出现的位置.原因等). 异常的继承体系 在 ...

  3. 《java JDK7 学习笔记》之异常处理

    1.java中所有的错误都会被打包为对象,JVM会尝试执行try区块中的程序代码,如果发生错误,执行流程会跳离错误发生点,然后比较catch括号中声明的异常类型,是否符合被抛出的错误对象类型,如果是的 ...

  4. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  5. java学习笔记15--多线程编程基础2

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...

  6. Android(java)学习笔记267:Android线程池形态

    1. 线程池简介  多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.     假设一个服务器完成一项任务所需时间为:T1 创建线程时间, ...

  7. Android(java)学习笔记211:Android线程池形态

    1. 线程池简介  多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.     假设一个服务器完成一项任务所需时间为:T1 创建线程时间, ...

  8. C#线程学习笔记九:async & await入门二

    一.异步方法返回类型 只能返回3种类型(void.Task和Task<T>). 1.1.void返回类型:调用方法执行异步方法,但又不需要做进一步的交互. class Program { ...

  9. JUC源码学习笔记5——线程池,FutureTask,Executor框架源码解析

    JUC源码学习笔记5--线程池,FutureTask,Executor框架源码解析 源码基于JDK8 参考了美团技术博客 https://tech.meituan.com/2020/04/02/jav ...

  10. 操作系统学习笔记----进程/线程模型----Coursera课程笔记

    操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进 ...

随机推荐

  1. javascript面向对象程序设计

    在学习js面向对象编程之前,首先须要知道什么是面向对象.面向对象语言都有类的概念,通过它能够创建具有同样属性和方法的对象.但js并没有类的概念,因此js中的对象和其它语言的对象有所不同. js对象能够 ...

  2. cocos2dx-3.0(1)------win7 32位android环境搭建

    參照链接http://blog.csdn.net/wonengxing/article/details/23601359 ----我的生活,我的点点滴滴!! 一. Android工具安装 1. 安装J ...

  3. hdu2062(递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2062 详细分析:http://mamicode.com/info-detail-95273.html ...

  4. HDU1087:Super Jumping! Jumping! Jumping!(DP)

    Problem Description Nowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very ...

  5. 2014ACM/ICPC亚洲区西安站 F题 color (组合数学,容斥原理)

    题目链接:传送门 题意: n个格子排成一行.我们有m种颜色.能够给这些格子涂色,保证相邻的格子的颜色不同 问,最后恰好使用了k种颜色的方案数. 分析: 看完题目描写叙述之后立刻想到了一个公式 :C(m ...

  6. AE+SceneControl源代码共享

    近来的,博友发私信或邮件交换,第一次使用前SceneControl代做一点project股票,做的很粗糙.我们希望对大家有帮助,欢迎留言交流哈萨克斯坦. 除了主开.保存.数据加载.询价,几个功能主要是 ...

  7. HttpApplication处理对象与HttpModule处理模块

    HttpApplication处理对象与HttpModule处理模块 (第三篇) 一.HttpApplication对象简述 在HttpRuntime创建了HttpContext对象之后,HttpRu ...

  8. Knockout应用开发指南 第三章:绑定语法(2)

    原文:Knockout应用开发指南 第三章:绑定语法(2) 7   click 绑定 目的 click绑定在DOM元素上添加事件句柄以便元素被点击的时候执行定义的JavaScript 函数.大部分是用 ...

  9. Objective-C NSObject 的实现分析(2014-10-23更新)

    NSObject 的实现分析 转载请注名出处 http://blog.csdn.net/uxyheaven iOS 的 NSObject 类没有开源, 可是呢 runtime开源了,里面有个类 Obj ...

  10. zTree实现地市县三级级联Service接口測试

    zTree实现地市县三级级联Service接口測试 ProvinceServiceTest.java: /** * @Title:ProvinceServiceTest.java * @Package ...