您的位置:首页 > 编程语言 > Java开发

Jvm处理Java Thread 的run方法中抛出异常的流程

2015-02-05 15:57 447 查看
众所周知,Java中在进行方法调用的时候,可能存在两种异常处理的场景:

被调用的方法在定义的时候就存在throws关键字,这种被抛出的异常,在Thread的run方法中,只能被try-catch语句块捕获,因为run方法本身是没有throws关键字的;

被调用的方法在定义的时候不存在throws关键字,但是仍然可能抛出异常,比如在Thread的run方法中,调用String的Parse系列方法对非数字的字符进行解析,就可能会抛出NumberFormatException,这种JVM是按照如下方式处理的:

首先看当前的线程,是否在start之前,通过调用setUncaughtExceptionHandler(UncaughtExceptionHandler, eh),设置了UncaughtExceptionHandler;如果已经设置,则使用此ExceptionHandler来处理;

否则,查看当前Thread所在的ThreadGroup,是否设置了UncaughtExceptionHandler;如果已经设置,则使用此ExceptionHandler来处理;

否则,查看Thread层面是否设置了UncaughtExceptionHandler,Thread类的静态方法setDefaultUncaughtExceptionHandler进行设置;如果已经设置,则使用此ExceptionHandler来处理;

如果上述UncaughtExceptionHandler都没有找到,那么JVM会直接在console中打印Exception的StackTrace信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐