`
小网客
  • 浏览: 1241179 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java之UncaughtExceptionHandler

    博客分类:
  • Java
 
阅读更多

概述:

UncaughtExceptionHandler是为了捕获没有被捕获的异常,包括运行时异常,执行错误(内存溢出等),子线程抛出的异常等,你可以在uncaughtException(xx)里对后续做处理包括资源释放等

用法:

Runnable实现:

class YourRunable implements Runnable {
	public void run() {
		throw new RuntimeException("YourRunable");
	}
}

UncaughtExceptionHandler实现:

class YourUncaughtExceptionHandler implements UncaughtExceptionHandler {
	public void uncaughtException(Thread t, Throwable e) {
		System.out.println(t.getName());
		System.out.println("*****************");
	}
}

测试代码:

public static void main(String[] args) {
	Thread.setDefaultUncaughtExceptionHandler(new YourUncaughtExceptionHandler());
	try {
		Thread yourThread = new Thread(new YourRunable());
		yourThread.start();
	} catch (Exception e) {
		e.printStackTrace();
	}

	try {
		throw new RuntimeException("main");
	} catch (Exception e) {
		e.printStackTrace();
	}
	throw new RuntimeException("main end");
}

输出:

Thread-0
*****************
java.lang.RuntimeException: main
	at org.apache.tools.onest.crawler.nun.TestUncaughtExceptionHandler.main(TestUncaughtExceptionHandler.java:20)
main
*****************

结论:

1.已经被捕获的异常不会被Handler

2.主线程通过Handler来操作子线程产生的异常,而不能直接try catch

3.主线程未被捕获的异常可以在此被Handler

 

ps:

主线程获取子线程的方式还可以通过子线程的标记位形式来操作,如封装异常类等

3
1
分享到:
评论
2 楼 小网客 2014-02-07  
im9527 写道

a.不管yourThread 是否有try catch,都会被 YourUncaughtExceptionHandler 处理
b.已经被捕获的主线程异常不会被Handler,没有try catch的主线程异常也可以由YourUncaughtExceptionHandler处理

a.只有当没有被catch的才会被YourUncaughtExceptionHandler处理
b.正确
1 楼 im9527 2014-01-26  

a.不管yourThread 是否有try catch,都会被 YourUncaughtExceptionHandler 处理
b.已经被捕获的主线程异常不会被Handler,没有try catch的主线程异常也可以由YourUncaughtExceptionHandler处理

相关推荐

    java UncaughtExceptionHandler Demo

    Java中的`UncaughtExceptionHandler`是Java异常处理机制的一部分,它允许程序员自定义当线程遇到未捕获异常时的行为。这个接口提供了处理未捕获异常的能力,这些异常通常是在线程执行过程中抛出且没有被该线程内部的...

    Android捕获异常处理——UncaughtExceptionHandler

    当Java应用程序中的线程抛出一个异常,并且这个异常没有被当前线程的任何 try-catch 块捕获时,系统会寻找该线程的 `UncaughtExceptionHandler`。默认情况下,Android会打印一个堆栈跟踪并关闭应用程序。但是,...

    UncaughtExceptionHandler Demo

    在Java编程语言中,`UncaughtExceptionHandler`是一个关键的角色,它允许我们自定义程序中未被捕获异常的处理方式。当线程抛出一个未被处理的异常并且没有其他异常处理器来接手时,这个接口就会派上用场。在本文中,...

    java、杀死启动进程、定时执行程序、隐藏黑窗口(dos窗口)、线程异常死亡(保活)

    在Java开发中,有时我们需要处理一系列复杂的问题,如管理进程、执行定时任务、处理异常以及隐藏命令行窗口。本文将详细探讨这些知识点,并提供一种自动重启JBOSS服务器的方案。 首先,我们要理解如何在Java中杀死...

    Android异常捕获demo(可以捕获ANR+UncaughtExceptionHandler)

    当Java应用中的一个线程抛出一个未捕获的异常时,如果没有其他处理程序处理它,系统会调用该线程的`UncaughtExceptionHandler`。在Android中,你可以自定义这个处理器来记录错误信息、展示用户友好的错误页面,甚至...

    java实现的电风扇

    在Java编程语言中,多线程是核心特性之一,它允许程序同时执行多个任务,从而提高了效率和响应性。在这个“java实现的电风扇”项目中,开发者利用多线程技术模拟了电风扇的工作原理,这为我们提供了一个有趣的实例来...

    JAVA线程学习(源代码)

    我们可以使用`uncaughtExceptionHandler`来处理线程中抛出的未捕获异常。 总的来说,"JAVA线程学习(源代码)"涵盖了Java线程的基础知识和高级特性,包括线程的创建、管理、同步和通信。通过分析和实践这些源代码,你...

    Java多线程下载网络图片

    使用`try-catch`块捕获异常,并通过`Thread.UncaughtExceptionHandler`指定线程未捕获异常的处理策略。 6. **进度监控和取消**:为了给用户提供反馈,我们可以使用`Future`的`get()`方法获取任务状态,或者通过监听...

    java线程与并行(主要讲解java的nio包某些内容)

    ### Java线程与并行详解 #### 一、Java线程基础 在Java中,**线程**是一种轻量级的进程,它允许一个程序同时执行多个任务,从而提高程序的执行效率。Java从1.0版本开始就支持多线程编程,并在后续版本中不断完善。...

    Java-核心篇.zip

    6. **线程异常处理**:学习如何在多线程环境中捕获和处理异常,以及`Thread.UncaughtExceptionHandler`接口的使用。 7. **线程池**:深入理解`ThreadPoolExecutor`的工作原理,如何配置线程池参数,以及如何优化...

    Android开发使用UncaughtExceptionHandler捕获全局异常

    `UncaughtExceptionHandler`是Java中的一个接口,用于处理线程未捕获的异常。在Android中,每个线程都有一个默认的`UncaughtExceptionHandler`,当线程抛出未被处理的异常时,这个处理器会被调用。通过覆盖`uncaught...

    java 并发学习总结

    `Thread.UncaughtExceptionHandler`接口可以用于定义线程未捕获异常的处理方式,确保程序在出现异常时能优雅地结束。 6. **线程中断**:通过`Thread.interrupt()`方法可以请求线程中断,但实际中断行为取决于被中断...

    java 多线程编程指南

    正确地使用try-catch-finally结构和thread.uncaughtExceptionHandler可以确保异常得到妥善处理。 线程池是Java并发编程中的最佳实践,它通过复用已有线程来减少创建和销毁线程的开销。ExecutorService和...

    java多线程多人聊天系统

    Java的Thread.UncaughtExceptionHandler接口可以用来设置未捕获异常的处理器,确保线程在出现异常时能正确关闭,而不影响其他线程。 5. **线程池**:为了更好地管理和优化线程,Java提供了ExecutorService和...

    Java时序银行系统.zip

    Java的`try-catch-finally`结构和`Thread.UncaughtExceptionHandler`接口可以用于捕获和处理线程中的异常。 总之,"Java时序银行系统"是一个很好的学习多线程编程的案例。通过分析和实践这个项目,开发者可以深入...

    java线程学习笔记

    Java线程学习笔记涉及了Java多线程编程的多个关键知识点,本篇知识点整理将详细解释每个概念及其在Java中的实现方式。 基本知识部分包含了Java线程编程的基础内容,它们是并发编程的基石。 任务Runnable是一个接口...

    java自定义线程模型处理方法分享

    6. **异常处理**:当线程中发生异常时,需要有适当的处理机制来防止程序崩溃,例如使用`try-catch-finally`块,或者定义线程的`uncaughtExceptionHandler`。 自定义线程模型设计时,还需要考虑以下几点: - **线程...

    OS进程管理最终强化版(Java)

    Java的`try-catch-finally`结构可以捕获并处理异常,而在多线程环境下,`Thread.UncaughtExceptionHandler`可以定义全局的未捕获异常处理器,确保即使在异常情况下也能优雅地处理错误。 总之,“OS进程管理最终强化...

    Java多线程的总结

    可以通过设置Thread的UncaughtExceptionHandler来捕获和处理这些异常。 九、线程安全类 Java集合框架中有一些线程安全的类,如Vector、HashTable、ConcurrentHashMap等,它们内部实现了同步机制,可以在多线程环境...

    APress-Taming-Java-Threads-Code.rar_taming java threads_threads

    6. **线程异常处理**:Java线程的异常处理机制,包括UncaughtExceptionHandler,以及如何在多线程环境中优雅地处理异常。 7. **性能调优**:书中将介绍如何通过监控和调整线程参数来提升并发性能,包括Java的JMX、...

Global site tag (gtag.js) - Google Analytics