监控RuntimeException
2016-03-13 22:17
246 查看
RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。可能在执行方法期间抛出但未被捕获的 RuntimeException 的任何子类都无需在 throws 子句中进行声明。
在线程提前终止的最主要原因就是RuntimeException,由于这些异常表示出现了某种编程错误或者其他不可修复的错误,因此它们通常不会被捕获。它们不会在调用栈中逐层传递,而是默认地在控制台中输出栈追踪信息,并终止线程
我们可以通过实现java.lang.Thread.UncaughtExceptionHandler接口来获取RuntimeException异常的信息。
举个栗子
要为线程池中的所有线程设置一个UncaughtExceptionHandler,需要为ThreadPoolExecutor的构造函数提供一个ThreadFactory。
需要注意的是只有通过execute提交的任务,才能将它抛出的异常交给UncaughtExceptionHandler;而通过submit提交的任务,无论是抛出的未检查的异常还是已检查的异常,都将被认为是任务返回状态的一部分,如果一个submit提交的任务抛出异常而结束,则那个异常将被Future.get封装在ExecutionException中重新抛出
在线程提前终止的最主要原因就是RuntimeException,由于这些异常表示出现了某种编程错误或者其他不可修复的错误,因此它们通常不会被捕获。它们不会在调用栈中逐层传递,而是默认地在控制台中输出栈追踪信息,并终止线程
我们可以通过实现java.lang.Thread.UncaughtExceptionHandler接口来获取RuntimeException异常的信息。
举个栗子
[code]将异常写入日志 public class MyDemo implements java.lang.Thread.UncaughtExceptionHandler{ public void uncaughtException(Thread t,Throwable e){ log.error(Level.SEVERE, "Thread terminated with exception:" + t.getName(), e); } }
要为线程池中的所有线程设置一个UncaughtExceptionHandler,需要为ThreadPoolExecutor的构造函数提供一个ThreadFactory。
需要注意的是只有通过execute提交的任务,才能将它抛出的异常交给UncaughtExceptionHandler;而通过submit提交的任务,无论是抛出的未检查的异常还是已检查的异常,都将被认为是任务返回状态的一部分,如果一个submit提交的任务抛出异常而结束,则那个异常将被Future.get封装在ExecutionException中重新抛出
相关文章推荐
- Week3:构造一个简单的Linux系统MenuOS
- Apache Thrift入门(安装、测试与java程序编写)
- Week3:构造一个简单的Linux系统MenuOS
- CentOS使用yum命令时报错/usr/bin/python
- 事务管理在三层架构中应用以及使用ThreadLocal再次重构
- MVC架构的缺点
- CentOS 6.5 生产环境编译安装LNMP
- 分布式架构的演进
- openwrt 显示编译的版本信息
- linux下所有软件的汇总
- tomcat构建及session保持
- 编译mini2440的crosstool-NG和全志A20的Linux BSP(Buildroot)的心得
- Linux学习笔记:Nagios的配置
- Linux下MJPG-Streamer视频服务器搭建
- RDP(Remote Desktop Protocol) 学习总结
- linux内核分析 第三周 构造一个简单的Linux系统MenuOS
- Linux下多线程编程
- Linux 集群间无密码登录的配置
- linux wait函数
- CentOS7.0 64+JDK+Tomcat