zoukankan      html  css  js  c++  java
  • JavaSe:UncaughtExceptionHandler

     Java中,出现对于异常的处理,通常是使用try{}catch()来捕获处理的。但是在使用trycatch时,未必会将所有的异常都捕获到,所以方法声明时可以有throws xxxException

    对于这种情况,JVM到底是怎么处理的呢?下面就来看一看:

    如果异常没有被catch到,那么会走接下来的流程:

    1)由Thread自身的uncaughtExceptionHandler来处理

    前提是Thread#uncaughtExceptionHandler不是Null

    如果是null,执行2)。

    2)由Thread所属的ThreadGroupuncaughtException方法来处理。

           2.1)如果ThreadGroupparent group,那么就调用parent groupuncaughtException来处理。也就是说,要调用最顶层的ThreadGroupuncaughtException来处理。处理完毕就结束。最顶层的ThreadGroup处理过程是2.2)

           2.2Thread类中有一个类静态变量:defaultUncaughtExceptionHandler

             如果有设置该值,就调用该handleruncaughtException来处理。

             如果没有设置defaultUncaughtExceptionHandler值,又不是ThreadDeath错误,则直接在System.error中打出异常日志(包括异常栈)。

    上述处理过程,参见:Thread#dispatchUncaughtException(Throwable e);

    那么在我们编写代码时,是可以通过:

    1Thread#setUncaughtExceptionHander() 来为某个线程设置UncaughtExceptionHander

    2Thread.setDefaultUncaughtExceptionHander()来为设置默认的UncaughtExceptionHander

    3如果想要改变默认的调度流程:可以重写ThreadGroup#uncaughtException() 来完成。

  • 相关阅读:
    树莓派服务器搭建
    设计模式之装饰者模式
    设计模式之建造者模式
    Java IO
    设计模式之抽象工厂模式
    常用排序算法(堆排序)
    Struts2框架简介和示例
    静态代理和利用反射形成的动态代理(JDK动态代理)
    常用排序算法(插入排序,快速排序,归并排序,堆排序)
    设计模式之简单工厂和工厂方法模式
  • 原文地址:https://www.cnblogs.com/f1194361820/p/7240447.html
Copyright © 2011-2022 走看看