栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

线程的异常处理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

线程的异常处理

一:众所周知,当程序运行出错时,会出现异常。但是溯源到线程本身,线程是如何处理异常的呢?

二:首先我们知道,异常实际分为两种         1.受检异常

                定义方法时,必须声明所有可能抛出的异常。在调用该方法时,必须手动捕获它的checked Exception,即受检异常。如IO异常,SQL异常等。因此:受检异常实际可以理解为需要被手动捕获的异常,如B方法中主动抛出了异常,若方法A中调用B方法,也需要手动捕获该受检异常

        2.非受检异常

                非受检异常,实际就是RuntimeException运行时异常,在定义方法时是不需要声明的,如空指针异常。在调用该方法时也不需要手动捕获该异常,也就是说,非受检异常也可以理解为未捕获的异常

三:当我们了解了异常后,就可以进一步了解线程异常了

        1.在线程的run方法中,如果有受检异常,则同样需要手动捕获处理,但是如果想要获得run()方法中出现的运行时异常(非受检异常),我们可以通过回调接口UncaughtExceptionHandler获得哪个线程出现了运行时异常。

        2.UncaughtExceptionHandler回调接口说明

        (1)当线程运行过程中出现异常时,JVM会调用Thread类的dispatchUncaughtException方法,该方法会调用getUncaughtExceptionHandler().uncaughtException(this,e)来处理异常

        (2)getUncaughtExceptionHandler()方法中,若当前线程的uncaughtExceptionHandler不为空,则使用当前线程的uncaughtExceptionHandler,否则使用线程组的uncaughtExceptionHandler

        (3)因此,如果想要获得线程的运行时异常,就需要设置当前线程的uncaughtExceptionHandler实例,并实现该回调接口的uncaughtException(this,e)方法

        3.在Thread类中有关处理异常的方法有:

                (1)getDefaultUncaughtExceptionHandler():获取全局(默认)的UncaughtExceptionHandler

                (2)setDefalutUncaughtException():设置默认的UncaughtExceptionHandler

                (3)getUncaughtExceptionHandler():获取当前线程的UncaughtExceptionHandler

                (4)setUncaughtExceptionHandler():设置当前线程的UncaughtExceptionHandler

四:总结

        如果线程运行中产生了异常,JVM会调用Thread类的dispatchUncaughtException()方法,该方法调用了getUncaughtExceptionHandler(),uncaughtExceptoin(this,e)来处理了异常,如果当前线程设置了自己的UncaughtExceptionHandler,则使用该handler,调用自己的uncaughtException方法,如果没有,则使用当前线程所在的线程组的Handler的uncaughtExceptoin()方法,如果线程中中也没有设置,则直接把异常定向到System.err中(控制台红色字体输出的异常就是被定向到System.err的异常)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/694784.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号