/*
* 貌似有一篇文章写到uncaugthException()方法,这个方法是线程组类的一个很重要的方法,它用来处理线程未处理的异常。
* 其实,线程捕获异常的方式是这样的,如果线程没有捕获异常,那么java虚拟机会找到相关的UncaughtExceptionHandler实例化对象,如果
* 找到了就调用uncaughtException(Thread t, Throwable e)方法,如果找不到呢,就调用线程组的异常处理器,调用线程组的
* uncaughtException方法,因为每个线程都属于一个线程组,而这个线程组继承了UncaughtExceptionHandler这个接口,所以,线程组也可以
* 用来处理线程未捕获的异常。另一点需要说的是,线程本身就有两个个设置未捕获异常的使用方法:setDefaultUncaughtExceptionHandler和
* setUncaughtExceptionHandler方法,从字面上来理解,就是未捕获异常处理机制,线程可以设置自己的未捕获异常处理方式,前者是默认处理,表示
* 类的默认异常处理,这是一种静态方法,而后者是一种实例方法,它表示的是设置当前的异常处理方式。
*
*/
package com.cbh.thread_test;
*@author cbh–java编程网,http://www.haohaoblog.com
class MyGod extends ThreadGroup//线程组
{
public MyGod()
{
super(“I’m God!”);
}
public void uncaughtException(Thread t,Throwable e)//覆盖线程组的异常处理器方法
{
System.out.println(getName()+”抓到异常了,它来自线程:”+t.getName());
super.uncaughtException(t, e);//使用父类的异常处理器
}
}
class GodCaught implements Thread.UncaughtExceptionHandler
{//线程的未捕获的异常处理方式
private String name;
public GodCaught(String name)
{
this.name=name;
}
public void uncaughtException(Thread t, Throwable e) {//线程异常处理器方法
System.out.println(name+”抓到异常,它从线程:”+t.getName()+”来”);
}
}
public class Thread_uncaughtException extends Thread{
public Thread_uncaughtException(ThreadGroup group,String name)
{
super(group,name);
}
public void run()
{
int i=100/0+1;//线程抛出异常的地方
}
public static void main(String[] args) {
MyGod mg=new MyGod();
UncaughtExceptionHandler ueh=new GodCaught(“默认未捕捉线程异常处理”);
//设置异常处理方式,为默认方式,即设置类的异常处理器。
Thread_uncaughtException.setDefaultUncaughtExceptionHandler(ueh);
Thread_uncaughtException tue1=new Thread_uncaughtException(mg,”tue1″);
Thread_uncaughtException tue2=new Thread_uncaughtException(mg,”tue2″);
UncaughtExceptionHandler cur=new GodCaught(“设置未捕捉线程异常处理”);
tue2.setUncaughtExceptionHandler(cur);//设置当前的异常处理器
tue1.start();
tue2.start();
}
}
/**
* 整个的过程是这样的:当一个线程实例抛出未捕获的异常时,java虚拟机首先找到线程实例的当前异常处理器,调用uncaughtException()方法,如果找不到,就
* 找线程所属的线程组作为异常处理器,调用它的uncaughtException()方法,如果这个线程组有一个父类线程组,那么就调用uncaughtException方法,否则,如果
* 线程实例所属的线程类具有默认异常处理器,就调用这个默认异常处理器的uncaughtException方法,否则,就把来自方法调用堆栈的异常信息打印到标准输出流System.err中
* 当tue2抛出异常时,直接用当前处理器cur,对于tue1抛出的异常,由于没有设置当前处理器,所以有所属线程组作为异常处理器,处理完后再转让给所属类Thread_uncaughtException的默认异常处理器
* ueh进行处理。
*/
1
您可能也喜欢:java编程网
java多线程中的同步特点-------同步与并发的两难境地
我需要你,我得跟你通信----java多线程通信
线程的各种状态---线程五状态
为你守护---java线程中的守护线程(后台线程)
类似数组的java线程组
无觅
本文固定链接: http://www.haohaoblog.com/?p=571 | java编程网
分享到:
相关推荐
这将确保即使没有显式处理异常的线程也能得到适当的处理。 2. **单个线程的异常处理器**:每个`Thread`对象都有一个`UncaughtExceptionHandler`,可以通过`Thread.setUncaughtExceptionHandler`方法进行设置。这样...
"UncaughtException不让Android应用异常退出"这个主题,就是关于如何处理程序中的未捕获异常,以防止应用突然崩溃,从而提升用户体验。在这个问题上,我们可以从以下几个方面来探讨: 1. **...
本教程的焦点在于如何在多线程环境中有效地处理异常。以下是对这个主题的详细探讨: 一、多线程简介 Java通过`Thread`类和`Runnable`接口提供了对多线程的支持。一个线程可以理解为程序执行的一个流,多个线程可以...
- 如果没有找到合适的处理句柄,则会调用当前线程的父线程`ThreadGroup`的`uncaughtException`方法,以避免异常逃过处理。 #### 四、Java异常处理结构 Java异常处理结构由`try`、`catch`、`finally`三个部分组成...
UncaughtException处理类,当程序发生Uncaught异常的时候,有该类来接管程序,并记录发送错误报告. 获取CrashHandler实例 ,单例模式 崩溃处理 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成. 收集设备参数...
在Java多线程编程中,异常处理是一项关键的机制,特别是在多线程环境下,由于线程的并发执行,处理异常的方式与单线程有所不同。本文将深入探讨Java多线程中的异常捕捉,以及如何有效地在多线程环境中处理异常。 ...
标题“Uncaught DOMException:”通常出现在JavaScript编程中,指的是在执行代码时遇到了一个未捕获的DOM(Document Object Model)异常。这个错误通常意味着在访问或操作DOM元素时发生了问题,可能是由于尝试访问不...
当线程中抛出异常,且没有被该线程捕获时,系统会调用UncaughtExceptionHandler的uncaughtException方法。开发者可以实现这个接口,并在uncaughtException方法中定义自己的异常处理逻辑。 2. 实现...
Uncaught Exception(解决方案).md
1. **线程异常处理器类(ThreadExceptionHandler)**:这是实现`Thread.UncaughtExceptionHandler`接口的类,其中`uncaughtException`方法是核心,它接收两个参数,一个是出现异常的线程对象,另一个是未捕获的异常...
public void uncaughtException(Thread t, Throwable e) { // 处理未捕获的异常 } }); t.start(); ``` #### 四、示例代码分析 假设有一个需要排序的长列表`list`,可以在后台进行排序操作而不阻塞主线程。...
如果线程组没有父线程组或者父线程组没有处理,就会调用`ThreadGroup.uncaughtException()`方法进行处理。 除了线程组和异常处理,Java多线程还包括许多其他重要概念,如线程的生命周期(新建、可运行、运行、阻塞...
在尝试运行`EmployeeFindPanel.java`时,遇到了`java.lang.NoSuchMethodError: main`异常。这个错误通常发生在类中没有定义`public static void main(String[] args)`方法的情况下。 #### 解决方案 - **检查源代码*...
在Java开发中,有时我们需要处理一系列复杂的问题,如管理进程、执行定时任务、处理异常以及隐藏命令行窗口。本文将详细探讨这些知识点,并提供一种自动重启JBOSS服务器的方案。 首先,我们要理解如何在Java中杀死...
`uncaughtException()`方法接收两个参数:一个是抛出异常的线程对象,另一个是未捕获的异常本身。 ```java public class CustomExceptionHandler implements UncaughtExceptionHandler { @Override public void ...
当群组中的线程抛出未捕获异常时,可以通过重写`uncaughtException(Thread t, Throwable e)`方法来定义处理策略。 5. **守护线程与非守护线程**:线程群组可以设置为守护线程或非守护线程,这会影响程序的退出。...
可以使用Thread.UncaughtExceptionHandler接口来处理这种异常情况,该接口允许我们设置一个异常处理器,当线程抛出未捕获异常时,JVM会调用该处理器的uncaughtException()方法来进行处理。 知识点11:线程间共享...