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.tutorialspoint; 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