首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

缉拿逃走的java线程错误处理UncaughtException方法

2012-09-20 
缉拿逃走的java线程异常处理UncaughtException方法/* * 貌似有一篇文章写到uncaugthException()方法,这个

缉拿逃走的java线程异常处理UncaughtException方法
/*
* 貌似有一篇文章写到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编程网
1 楼 lliiqiang 2012-06-15   数据传输的时候为了保证同步全部由后台决定,从而达到统一效果,即其他计算机仅仅发布命令,结果由一台计算机统一决定

热点排行