プログラマメモ2 - programmer no memo2

ThreadGroupのuncaughtExceptionメソッド 2007/02/13

javadoc1.4には、

このスレッドグループ内のスレッドが、キャッチされていない例外のために停止すると、Java 仮想マシンによって呼び出されます。
........
アプリケーションは、ThreadGroup のサブクラスでこのメソッドをオーバーライドして、キャッチされていない例外を別の方法で処理することができます。
とあります。

キャッチしていない例外を処理したい。

という場合に使えそうです。

簡単なサンプルコードです。
public class TestUncaughtException {

public static void main(String[] args) {

class MyThreadGroup extends ThreadGroup{

public MyThreadGroup(String name) {
super(name);
}

public void uncaughtException(Thread t, Throwable e) {
System.out.println("oh my god!!");
}
}

Thread thread = new Thread(new MyThreadGroup("test"), new Runnable(){
public void run() {
a();
}}
);

thread.start();


}

public static void a() {
a2();
}

public static void a2() {
a3();
}

public static void a3() {
if (true)
throw new RuntimeException("@_@!! Ouch");
}
}


サンプルコードを実行しますと、
実行時例外のスタックトレースが出力されるかわりに、oh my god!!が出力されます。

使うための仕組みを考えるのが面倒かなと思いました。

: