博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java线程学习笔记(两) 线程异常处理
阅读量:6576 次
发布时间:2019-06-24

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

线程捕获异常:

情况下,我们在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()该方法仍然没有捕捉到异常的线程,当然,这个设置是合理的。现在每个线程都有自己的异常处理机制,怎么办呢,句子,创建一个线程时,该语句是好的~

收工。

转载地址:http://vhrjo.baihongyu.com/

你可能感兴趣的文章
任务调度器配置文件
查看>>
ORACLE 存储过程异常捕获并抛出
查看>>
HDU 4293 Groups (线性dp)
查看>>
博客园博客美化相关文章目录
查看>>
root用户重置其他密码
查看>>
关于查询扩展版ESI高被引论文的说明
查看>>
【iCore3应用】基于iCore3双核心板的编码器应用实例
查看>>
Oracle推断值为非数字
查看>>
得知发行组长老潘今天岗位上最后一天就要离开有感
查看>>
多年前写的一个ASP.NET网站管理系统,到现在有些公司在用
查看>>
vue-cli中理不清的assetsSubDirectory 和 assetsPublicPath
查看>>
从JDK源码角度看Short
查看>>
解密Angular WebWorker Renderer (二)
查看>>
parceljs 中文文档24小时诞生记
查看>>
五年 Web 开发者 star 的 github 整理说明
查看>>
Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
查看>>
ReactNative字体大小不随系统字体大小变化而变化
查看>>
中台之上(五):业务架构和中台的难点,都是需要反复锤炼出标准模型
查看>>
为什么中台是传统企业数字化转型的关键?
查看>>
使用模板将Web服务的结果转换为标记语言
查看>>