顺服Tiger: 线程中的默许非常处理[Java编程]
本文“顺服Tiger: 线程中的默许非常处理[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
固然我们不想成立在无法预期时抛出运行时非常的程序,但这种情形还是会发生——特别是第一次运行复杂程序时.普通是利用默许行为、打印仓库溢出和完毕线程的生命来处理这些非常.
从那边发现默许行为?每个线程都属于一个由 java.lang.ThreadGroup 类表示的线程组.顾名思义,线程组答应您将线程组合在一同.您大概是为了便利而将线程组合,比方,一个线程池中的全部线程都属于组 X,而另一个池的全部线程则属于组 Y,大概是为了拜候掌握而将线程举行组合.组 X 中的线程无权拜候或改变组 Y 中的线程,除非它们都在同一线程组内(或在一个子组内).
在 Tiger 之前,ThreadGroup 类供应了一种处理未捕捉非常的办法:ThreadGroup 的 uncaughtException() 办法.假如非常不是 ThreadDeath ,则将线程的名称和仓库回溯(stack backtrace)发送到 System.err .但是 Tiger 增添了另一种办法:Thread.UncaughtExceptionHandler 接口.细分 ThreadGroup 或安装该新接口的实现都答应您更改默许行为.我们将对 Tiger 之前和之后供应的办法都举行研究.
利用 ThreadGroup 的定制行为
发生未捕捉的非常时,默许行为是将仓库溢出打印输出到系统错误( System.err )中,如清单 1 中所示.不需求利用任何号令参数来启动程序.
清单 1. 线程溢出示例
public class SimpleDump {
public static void main(String args[]) {
System.out.println(args[0]);
}
}
不利用任何参数运行该程序将生成清单 2 中的输出.固然它不是一个很长的仓库跟踪,但它是一个完好的仓库跟踪.
清单 2. 默许线程溢出输出
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at SimpleDump.main(SimpleDump.java:3)
正如 Java 平台的很多东西一样,假如不喜好默许行为,您可以对其举行更改.在 Java 平台的 Tiger 版从前的版本中,不能替换全部线程的默许行为,但是可以成立一个新的 ThreadGroup ,并更改在该组内成立的任何线程的默许行为.您可以重写 uncaughtException(Thread t, Throwable e) 办法来定制该行为.然后,当发生未意料的运行时非常时,该线程组内成立的任何线程都将得到新的行为.不过,最好是修复底子问题,我将供应一个简单的示例,阐明更改默许行为所必须的步骤.清单 3 展示了将履行代码放入新线程的调整过的测试程序:
清单 3. 调整过的线程溢出示例
public class WindowDump {
public static void main(String args[]) throws Exception {
ThreadGroup group = new LoggingThreadGroup("Logger");
new Thread(group, "myThread") {
public void run() {
System.out.println(1 / 0);
}
}.start();
}
}
以上是“顺服Tiger: 线程中的默许非常处理[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |