実行はHandledExceptionsをスローしないと言われています。JVMは単にそれらを無視します。そこで、UnHandled Exception(ArithmeticException)をスローしました。しかし、同じことが起こりました。XXXとマークされたcatch句によって開始されたスレッドからの例外をキャッチしようとするのはばかげていることを私は知っています。なぜなら、その言い訳はすでにその線を通過しているかもしれないからです。
しかし、JavaがHandled例外を制限しながらrunがUnhanlded Exceptionをスローすることを許可する理由と、run()がUnhandled Exceptionをスローするとさらに何が起こるのか知りたいですか?
親スレッド
public class Parent {
public static void main(String[] args) {
Child child = new Child();
Thread chThread = new Thread(child);
try {
chThread.start();
} catch (Exception e) { // XXX mark
System.err.println("XXX");
e.printStackTrace();
}
}
子スレッド
public class Child implements Runnable {
@Override
public void run() throws ArithmeticException{
method0(); // line 8
}
public void method0(){
int i = 0/0; // line 12
}
}
java.lang.Thread
public class Thread implements Runnable {
public void run() {
if (target != null) {
target.run(); // line 619
}
}
}
スタックトレース
Exception in thread "Thread-0" java.lang.ArithmeticException: / by zero
at seperateStacksPerThread.Child.method0(Child.java:12)
at seperateStacksPerThread.Child.run(Child.java:8)
at java.lang.Thread.run(Thread.java:619)