JavaSe:UncaughtExceptionHandler
Java中,出现对于异常的处理,通常是使用try{}catch()来捕获处理的。但是在使用trycatch时,未必会将所有的异常都捕获到,所以方法声明时可以有throws xxxException。
对于这种情况,JVM到底是怎么处理的呢?下面就来看一看:
如果异常没有被catch到,那么会走接下来的流程:
1)由Thread自身的uncaughtExceptionHandler来处理
前提是Thread#uncaughtExceptionHandler不是Null。
如果是null,执行2)。
2)由Thread所属的ThreadGroup的uncaughtException方法来处理。
2.1)如果ThreadGroup有parent group,那么就调用parent group的uncaughtException来处理。也就是说,要调用最顶层的ThreadGroup的uncaughtException来处理。处理完毕就结束。最顶层的ThreadGroup处理过程是2.2)。
2.2)Thread类中有一个类静态变量:defaultUncaughtExceptionHandler。
如果有设置该值,就调用该handler的uncaughtException来处理。
如果没有设置defaultUncaughtExceptionHandler值,又不是ThreadDeath错误,则直接在System.error中打出异常日志(包括异常栈)。
上述处理过程,参见:Thread#dispatchUncaughtException(Throwable e);
那么在我们编写代码时,是可以通过:
1)Thread#setUncaughtExceptionHander() 来为某个线程设置UncaughtExceptionHander。
2)Thread.setDefaultUncaughtExceptionHander()来为设置默认的UncaughtExceptionHander。
3)如果想要改变默认的调度流程:可以重写ThreadGroup#uncaughtException() 来完成。
JavaSe:UncaughtExceptionHandler的更多相关文章
- JavaSe:Properties文件格式
Properties文件格式说明 Properties继承自Hashtable,是由一组key-value的集合. 在Java中,常用properties文件作为配置文件.它的格式是什么样的呢? 下图 ...
- JavaSe:ThreadLocal
JDK中有一个ThreadLocal类,使用很方便,但是却很容易出现问题.究其原因, 就是对ThreadLocal理解不到位.最近项目中,出现了内存泄漏的问题.其中就有同事在使用ThreadLocal ...
- JavaSe:-javaagent,-agentlib,-agentpath
内容简述 -javaagent,-agentlib, -agentpath 说明 -javaagent示例 -javaagent.-agentlib.-agentpath -agentlib:li ...
- JavaSe:Cookie 管理的API介绍
CookieManager 在使用HttpURLConnection中,并没有关于Cookie的管理.如果使用Java程序时,怎么管理cookie呢? Cookie案例 1. User Agent - ...
- JavaSe:Comparator
今天,公司里有一个萌萌的妹子问我java 中的comparator是怎么回事.参数分别是什么,返回值又是什么,为此,我写了一个简单的程序告诉了她: public static void main (S ...
- JavaSe:代码块执行顺序
//执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. //普通代码块:在方法或语句中出现 ...
- JavaSE:关键字(全)
访问控制: private 访问控制方式:私有的 protected 访问控制方式:受保护的 public 访问控制方式:公共的 类.方法和变量修饰符: abstract 声明抽象,表明类或者成员方法 ...
- JavaSE:数据类型之间的转换(附常见面试题)
数据类型之间的转换 分为以下几种情况: 1)低级到高级的自动类型转换: 2)高级到低级的强制类型转换(会导致溢出或丢失精度): 3)基本类型向类类型转换: 4)基本类型向字符串的转换: 5)类类型向字 ...
- JavaSE:八种基本数据类型
变量: 程序用来存储数据的一块内存空间,程序在运行过程中可以对其存储的数据进行改变,所以叫做变量 常量:相对于变量来说,其值是不可改变的 整数类型(byte short int long) b ...
随机推荐
- 《天书夜读:从汇编语言到windows内核编程》四 windows内核调试环境搭建
1) 基础篇是讲理论的,先跳过去,看不到代码运行的效果要去记代码是一个痛苦的事情.这里先跳入探索篇.其实今天的确也很痛苦,这作者对驱动开发的编译与调试环境介绍得太模糊了,我是各种尝试,对这个环境的搭建 ...
- [转载] Tomcat架构分析
转载自http://gearever.iteye.com/category/223001
- Python之argparse模块
argparse 命令行参数解析模块,原optparse已经停止开发,建议替换为argparse 在python2.7后默认加入 parser ArgumentParser默认解析来源sys.argv ...
- maven学习之三
maven 创建工程: 1:直接命令:mvn archetype:generate -X -DgroupId=org.sselab -DartifactId=maven-for-mongodb -D ...
- PHP截取带有汉字的字符串,将汉字按两个字节计算
<?php header("Content-type:text/html;charset=utf-8"); /** *截取字符串,汉字占两个字节,字母占一个字节 *页面编码必 ...
- A computer hardware platform abstraction - part.1
intro Nowdays every electronic computer is based on Boole Algebra and Sequential Logic,So my post w ...
- jq获取被选中的option的值。jq获取被选中的单选按钮radio的值。
温故而知新,一起复习下jq的知识点. (1) jq获取被选中的option的值 <select id="select_id"> <option value=&qu ...
- Ubuntu下编译Bilibili/ijkplayer
在做Android客户端视频播放器的过程中熟悉ijkplayer.他在视频支持协议上要比Android原生的mediaplayer做的要好.因此,自己也基于Bilibili/ijkplayer的重新编 ...
- VUE 与其他常见前端框架对比
对比其他框架(转官方文档) 这个页面无疑是最难编写的,但我们认为它也是非常重要的.或许你曾遇到了一些问题并且已经用其他的框架解决了.你来这里的目的是看看 Vue 是否有更好的解决方案.这也是我们在此想 ...
- MySql的技术规范-企业版(来源于MySql官网)
MySQL技术规范 Oracle MySQL云服务 MySQL数据库即服务 灵活的架构 开源 多线程 可插拔的存储引擎架构 InnoDB,NDB集群 MyISAM,合并,内存,存档 ANSI SQL标 ...