一个线程运行时发生异常会怎样

Java中的异常分为运行时异常和非运行时异常,编译器会检查非运行时异常的处理。未捕获的运行时异常会导致线程退出,主线程退出则程序停止。对于多线程,需为每个线程设置UnCaughtExceptionHandler来处理异常,或者使用ThreadPoolExecutor为线程池设置异常处理器。
摘要由CSDN通过智能技术生成

        要看我们有没有捕获处理这个异常,如果捕获处理了这个异常,那么线程会继续执行;如果没有对这个运行时异常进行捕获处理,那么有以下情况:
        1、如果这个线程是主线程,那么它会释放掉所持有的锁,并且退出执行,主线程退出了,那么程序也就停止执行了;
        2、如果这个线程不是主线程,那么它会释放掉所持有的锁,并且退出执行,但是它的退出不会导致程序停止执行,主线程和其他线程依然会继续执行。

        java中的异常包括运行时异常和非运行时异常【也就是检查时异常】,编译器在编译的时候会去检查非运行时异常是否进行了处理,但是不会去检查运行时异常,所以我们必须处理检查时异常,却可以不去处理运行时异常。当然对于运行时异常也可以进行处理,只不过对于非主线程异常的处理方式与主线程有所不同:
        主线程的异常处理器是由jvm自动调用的,我们无需去为主线程设置异常处理器,而在多线程编程中,我们需要为这些线程设置异常处理器,在Thread类中有一个内部接口UnCaughtExceptionHandler以及一个方法setUnCaughtExceptionHandler,我们需要定义一个类去实现这个内部接口UnCaughtExceptionHandler,然后调用这个方法去给线程设置异常处理器;或者是使用Executor框架为线程池设置异常处理器,ThreadPoolExecutor也有一个
setUnCaughtExceptionHandler方法,可以为线程池中的线程设置异常处理器。当为线程设置了异常处理器之后,线程在运行期间再发生异常,jvm就会去调用我们设置的异常处理器进行处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值