Java线程组与未处理异常实例分析

作者:cakincqm 时间:2021-12-01 12:21:08 

本文实例讲述了Java线程组与未处理异常。分享给大家供大家参考,具体如下:

一 点睛

从JDK1.5开始,Java加强了线程的异常处理,如果线程执行过程中抛出了一个未处理的异常,JVM在结束该线程之前会自动查找是否有对应的Thread.UncaughtExceptionHandler对象,如果找到该处理器对象,将会调用该对象的uncaughtException(Thread t, Throwable e)方法来处理该异常。

Thread.UncaughtExceptionHandler是Thread类的一个内部公共静态接口,该接口内只有一个方法:void uncaughtException(Thread t, Throwable e),该方法中的t代表出现异常的线程,而e代表该线程抛出的异常。

线程组处理异常的默认流程:

1 如果该线程组有父线程组,则调用父线程组的uncaughtException方法来处理该异常。

2 如果该线程实例所属的线程类有默认的异常处理器(由setDefaultUncaughtExceptionHandler方法设置的异常处理器),那就调用该异常处理器来处理该异常。

3 如果该异常对象是ThreadDeath的对象,将不做任何处理;否则将异常跟踪栈的信息打印到System.err错误输出流,并结束该线程。

二 实战

1 代码


// 定义自己的异常处理器
class MyExHandler implements Thread.UncaughtExceptionHandler
{
  // 实现uncaughtException方法,该方法将处理线程的未处理异常
  public void uncaughtException(Thread t, Throwable e)
  {
     System.out.println(t + " 线程出现了异常:" + e);
  }
}
public class ExHandler
{
  public static void main(String[] args)
  {
     // 设置主线程的异常处理器
     Thread.currentThread().setUncaughtExceptionHandler
       (new MyExHandler());
     int a = 5 / 0;   // ①
     System.out.println("程序正常结束!");
  }
}

2 运行

Thread[main,5,main] 线程出现了异常:java.lang.ArithmeticException: / by zero

3 说明

程序指定的异常处理器对未捕获的异常进行了处理,但程序依然不会正常结束。这说明异常处理器与通过catch捕获异常是不同的——当使用catch捕获异常时,异常不会向上传递给上一级调用者,但使用异常处理器对异常进行处理之后,异常依然会传递给上一级调用者。

更多java相关内容感兴趣的读者可查看本站专题:《Java进程与线程操作技巧总结》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

来源:https://blog.csdn.net/chengqiuming/article/details/90736218

标签:Java,线程组,未处理异常
0
投稿

猜你喜欢

  • spring boot使用thymeleaf为模板的基本步骤介绍

    2023-12-13 15:07:23
  • Java8方法引用及构造方法引用原理实例解析

    2022-07-24 08:21:22
  • Java C++题解leetcode字符串轮转KMP算法详解

    2023-05-30 11:28:49
  • Java中Request请求转发详解

    2021-05-25 20:53:42
  • spring boot项目中MongoDB的使用方法

    2021-06-10 13:31:23
  • Android入门之实现自定义Adapter

    2021-09-30 17:34:10
  • java中Memcached的使用实例(包括与Spring整合)

    2021-11-28 13:29:06
  • 游戏开发之随机概率的选择算法

    2022-08-26 13:21:09
  • C# 中string.split用法详解

    2023-04-09 13:58:34
  • C#使用yield关键字构建迭代器详解

    2023-02-09 12:48:49
  • Java验证时间格式是否正确方法类项目实战

    2021-05-30 02:15:15
  • 详解SpringBoot的事务管理

    2022-01-15 13:39:26
  • Android 中Banner的使用详解

    2023-08-18 08:57:02
  • JAVA像SQL一样对List对象集合进行排序

    2023-11-01 12:36:24
  • IntelliJ IDEA 安装教程2019.09.23(最新版)

    2023-08-24 23:01:44
  • 手把手带你了解Java-Stream流方法学习及总结

    2023-11-25 19:30:15
  • ShardingSphere jdbc集成多数据源的实现步骤

    2023-11-25 07:54:56
  • 如何通过SpringBoot实现商城秒杀系统

    2023-11-24 23:02:33
  • C#资源释放方法实例分析

    2022-03-22 04:46:20
  • Java语言实现二叉堆的打印代码分享

    2021-11-27 23:00:15
  • asp之家 软件编程 m.aspxhome.com