据说运行不会抛出处理异常。JVM 只是忽略它们。所以我抛出了 UnHandled Exception (ArithmeticException)。但同样的事情也发生了。我知道尝试从标记为 XXX 的 catch 子句启动的线程中捕获异常是荒谬的。因为执行可能已经通过了那条线。
但我想知道为什么 java 允许 run 在限制 Handled 异常的同时抛出 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)