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

java UncaughtExceptionHandler 处理线程意外中止

 
阅读更多

      Thread的run方法是不抛出任何检查型异常(checked exception)的,但是它自身却可能因为一个异常而被终止,导致这个线程的终结。最麻烦的是,在线程中抛出的异常即使使用try...catch也无法截获,因此可能导致一些问题出现,比如异常的时候无法回收一些系统资源,或者没有关闭当前的连接等等。 

      JDK5.0之前,不能为单独的Thread设置UncaughtExceptionHandler,也不能指定一个默认的UncaughtExceptionHandler。为了可以设置一个UncaughtExceptionHandler,需要去继承ThreadGroup并覆写uncaughtException方法。 

      在JDK5.0中,我们通过Thread的实例方法setUncaughtExceptionHandler,可以为任何一个Thread设置一个UncaughtExceptionHandler。当然你也可以为所有Thread设置一个默认的UncaughtExceptionHandler,通过调用Thread.setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)方法,这是Thread的一个static方法。 

      定义一个Handler类必须实现Thread.UncaughtExceptionHandler接口的void uncaughtException(Thread t, Throwable e)方法。如果不设置一个Handler,那么单个Thread的Handler是null。但是,如果这个单个线程是ThreadGroup中的一个Thread,那么这个线程将使用ThreadGroup的UncaughtExceptionHandler。ThreadGroup自身已经实现了Thread.UncaughtExceptionHandler接口。 

 

      uncaughtException(Thread a, Throwable e)可以拿到Thread,所以在uncaughtException释放相关资源是最好的办法。

      总之,JDK5.0中Thread及其相关的辅助功能得到了加强,为我们提供了很多便利和安全的解决方案:) 

分享到:
评论

相关推荐

    java UncaughtExceptionHandler Demo

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

    JAVA线程学习(源代码)

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

    Java多线程的总结

    Java中的线程有自己的异常处理机制,如果线程中抛出了未捕获的异常,该线程会被终止。可以通过设置Thread的UncaughtExceptionHandler来捕获和处理这些异常。 九、线程安全类 Java集合框架中有一些线程安全的类,如...

    Java多线程下载网络图片

    在Java编程中,多线程是一项关键技能,尤其在处理并发任务时,如我们的示例——"Java多线程下载网络图片"。这个场景展示了如何利用多线程技术提高程序性能,减少用户等待时间,同时优化系统资源的使用。下面我们将...

    java多线程笔记全手打

    `Thread.UncaughtExceptionHandler`接口用于定义线程未捕获异常的处理逻辑。 九、线程安全问题 线程安全主要涉及原子性、可见性和有序性问题。Java提供了一系列并发工具类,如`Atomic`系列类、`ConcurrentHashMap`...

    java多线程面试题

    它规定了操作的先行发生规则,包括程序次序规则、管程锁定规则、volatile变量规则、线程启动规则、线程终止规则、对象终结规则和可传递性规则。 知识点7:volatile变量 volatile是Java中的一个关键字,它用于声明...

    经典Java --线程

    可以通过try-catch-finally结构或者使用Thread.UncaughtExceptionHandler来处理线程中的未捕获异常。 线程池:Java的ExecutorService和ThreadPoolExecutor类提供了线程池的功能,可以有效管理和控制大量线程,提高...

    Android捕获异常处理——UncaughtExceptionHandler

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

    Java多线程的其他知识_动力节点Java学院整理

    如果一个线程在执行过程中抛出未处理的异常,Java虚拟机(JVM)会在终止该线程前尝试寻找合适的异常处理器。线程可以通过`Thread.setUncaughtExceptionHandler()`方法设置自己的异常处理器,而整个线程类可以通过`...

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

    - 如果线程因异常而终止,可以通过`Thread.UncaughtExceptionHandler`接口捕获并处理这些异常。 ```java Thread t = new Thread(new Runnable() { public void run() { try { // 可能抛出异常的代码 } catch...

    java 线程java 线程

    当线程中抛出未捕获的异常时,线程会突然终止,除非通过try-catch-finally结构捕获并处理异常,或者使用UncaughtExceptionHandler处理未被捕获的异常。 以上就是关于Java线程的一些基础知识,包括线程的创建、状态...

    java多线程设计模式详解

    当线程中发生异常时,必须正确地捕获和处理,以防止线程突然终止导致整个程序崩溃。使用Thread.UncaughtExceptionHandler可以指定线程未捕获异常的处理方式。 最后,书中可能会涉及线程优先级、线程中断以及线程的...

    java线程入门,一本简绍java线程的书

    9. **异常处理**:线程中的异常处理策略,包括`UncaughtExceptionHandler`。 10. **线程安全的集合**:如`ConcurrentHashMap`、`CopyOnWriteArrayList`等,以及它们在多线程环境下的应用。 11. **线程性能优化**:...

    Java 实例 - 多线程异常处理源代码-详细教程.zip

    1. **默认行为**:如果在非守护线程中发生未捕获的异常,那么线程将终止,并且异常会传递给线程的`UncaughtExceptionHandler`。 2. **自定义异常处理**:通过实现`Thread.UncaughtExceptionHandler`接口并将其设置为...

    Java多线程设计

    Java线程有五种状态:新建、就绪、运行、阻塞和终止。线程可以通过`wait()`、`sleep()`、`join()`等方法进行同步控制,这些方法使得线程能够在适当的时候暂停执行,等待其他线程完成特定操作。 Java提供了多种同步...

    java线程实践练习

    Java线程允许程序中的不同部分同时运行,这在处理大量I/O操作、网络通信或者需要进行复杂计算时尤其有用。本资料包聚焦于Java线程实践练习,旨在加深对Java编程及并发的理解。 一、Java线程基础 Java线程可以通过两...

    Java 多线程讲座

    Java多线程是Java编程中的一个核心概念,它允许程序同时执行...通过这个“Java多线程讲座”,你将全面了解Java中的线程编程,学会如何创建、管理和优化线程,以及处理并发问题,为开发高效的多线程应用打下坚实的基础。

    java线程学习笔记

    后台线程(daemon)是一种特殊类型的线程,它在后台运行,并且当所有前台线程终止后,后台线程无论是否执行完毕,都会自动结束。后台线程常用于为前台线程提供服务的场景,例如垃圾回收线程。 加入线程(join)允许...

    java线程异常

    为了确保线程异常的正确处理,通常会在`run()`方法内部进行try-catch-finally结构,或者使用`Thread.UncaughtExceptionHandler`来设定全局的未捕获异常处理器。 测试线程池(testThreadPoolExecutor)可能涉及编写...

    Java多线程练习源代码

    Java中的线程有五种状态:新建(New)、可运行(Runnable)、运行(Running)、等待/阻塞(Blocked)、终止(Terminated)。理解这些状态对于线程管理至关重要。 3. **同步机制** 为了解决多线程间的资源竞争问题...

Global site tag (gtag.js) - Google Analytics