java.lang.ThreadGroup.uncaughtException()方法实例
java.lang.ThreadGroup.uncaughtException() 方法被调用的Java虚拟机时,该线程组中的线程停止,因为未捕获的异常,线程没有安装特定的Thread.UncaughtExceptionHandler。
声明
以下是java.lang.ThreadGroup.uncaughtException()方法的声明
public void uncaughtException(Thread t, Throwable e)
参数
-
t -- 这是将要退出线程。
-
e -- 这是未捕获的异常。
返回值
此方法不返回任何值。
异常
-
NA
例子
下面的例子显示java.lang.ThreadGroup.uncaughtException()方法的使用。
package com.yiibai; import java.lang.*; public class ThreadGroupDemo implements Runnable { public static void main(String[] args) { ThreadGroupDemo tg = new ThreadGroupDemo(); tg.func(); } public void func() { try { // create a new ThreadGroup and a child for that ThreadGroup. newThreadGroup pGroup = new newThreadGroup("ParentThreadGroup"); newThreadGroup cGroup = new newThreadGroup (pGroup,"ChildThreadGroup"); // create another thread Thread thr2 = new Thread(pGroup, this); System.out.println("Starting " + thr2.getName() + "..."); // this will call run() method thr2.start(); // create third thread Thread thr3 = new Thread(cGroup, this); System.out.println("Starting " + thr3.getName() + "..."); // this will call run() method thr3.start(); try { Thread.sleep(500); } catch(InterruptedException ex) {} // interrupt the two threads thr2.interrupt(); thr3.interrupt(); // block until the other threads finish thr2.join(); thr3.join(); } catch(InterruptedException e) { System.out.println(e.toString()); } } public void run() { try { System.out.print(Thread.currentThread().getName()); System.out.println(" executing..."); while(true) { Thread.sleep(500); } } catch(InterruptedException e) { Thread currThread = Thread.currentThread(); System.out.print(currThread.getName()); System.out.println(" interrupted:" + e.toString()); // rethrow the exception throw new RuntimeException(e.getMessage()); } } } class newThreadGroup extends ThreadGroup { newThreadGroup(String n) { super(n); } newThreadGroup(ThreadGroup parent, String n) { super(parent, n); } public void uncaughtException(Thread t, Throwable e) { System.out.println(t + " has unhandled exception:" + e); } }
让我们来编译和运行上面的程序,这将产生以下结果:
Starting Thread-0... Starting Thread-1... Thread-0 executing... Thread-1 executing... Thread-0 interrupted: java.lang.InterruptedException: sleep interrupted Thread[Thread-0,5,ParentThreadGroup] has unhandled exception: java.lang.RuntimeException: sleep interrupted Thread-1 interrupted: java.lang.InterruptedException: sleep interrupted Thread[Thread-1,5,ChildThreadGroup] has unhandled exception: java.lang.RuntimeException: sleep interrupted