多线程-UncaughtException

在多线程开发中,主线程能方便地捕获异常,但子线程的异常处理较为复杂。传统的try/catch方式在每个run方法中实现,不具备普适性。本文介绍了使用UncaughtExceptionHandler进行全局异常处理的方法,便于批量处理子线程异常,例如记录到日志或接入异常监控系统。同时讨论了Java异常体系、全局异常处理的原因、run方法是否能抛出异常及其对线程状态的影响,以及如何处理未处理的线程异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在多线程开发中,我们会面对很多的异常问题。但是,主线程的异常我们知道很方便捕获并且处理,但是对于子线程而言呢?

package Thread_.UncaughtException;

/**
 * @program:多线程和IO
 * @descripton:传统方法无法捕获子线程异常
 * @author:ZhengCheng
 * @create:2021/9/22-10:13
 **/
public class ThreadException extends Thread {
    public static void main(String[] args) {
        try {
            new ThreadException().start();
        } catch (Exception e) {
            System.out.println("I caught this Exception");
        }
    }
//    @Override
//    public void run() {
//        throw new RuntimeException();
//    }
    //解决方案1: (不推荐) 在run方法中使用trycatch捕获异常 ,提高健壮性。
    @Override
    public void run() {
        try {
            throw new RuntimeException();
        } catch (RuntimeException e) {
            System.out.println("catch success");
        }
    }
}

 测试上述代码,在主线程中,我们是无法catch到子线程抛出的异常的。故子线程的异常&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值