java 多线程中的异常处理

本文探讨了Java多线程编程中线程异常的捕获问题。解释了为什么无法直接在主线程中捕获子线程抛出的异常,并提出了两种解决方案:一是通过传递List收集异常,二是使用Java提供的线程异常回调函数。

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

1、java多线程中,最近线程会抛异常,但是所以自然的想着通过try catche来捕获异常:

try {
    thread1.start();
} catch (Exception e) {
    System.out.println("thread1 异常被捕获");
}

抛异常代码段为:

public void run() {

        synchronized (lock) {
            int[] a = {1};
            System.out.println("this is thread One");
            System.out.println(a[2]);
        }

后来发现异常在线程里面抛出以后我们截取不到,最后才反应过来 自己是二逼呀。

当线程抛出异常以后,线程就会终结,而对于主线程和其他线程完全不受影响,且完全感知不到某个线程抛出的异常(也是说完全无法catch到这个异常)。JVM的这种设计源自于这样一种理念:“线程是独立执行的代码片断,线程的问题应该由线程自己来解决,而不要委托到外部。”所以我们不能够直接捕获异常。

解决方法为:在执行线程的时候,传递一个List用于保存当前线程的异常。然后当线程执行完毕以后就将这个list返回,这样就可以获取到线程的异常。或者使用java提供的线程异常回调函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值