【发布时间】:2020-01-24 12:32:15
【问题描述】:
我正在使用以下内容从主线程创建一个新线程:
public static void main(String[] args) {
try {
new TestThread().start();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Inside main");
}
并抛出异常。我也可以在主线程中捕获它。但是根据article
不应该这样吧?
编辑:
public class TestThread extends Thread {
@Override
public void run() {
throw new RuntimeException();
}
}
异常跟踪
Inside main
Exception in thread "Thread-0" java.lang.RuntimeException
at TestThread.run(TestThread.java:8)
【问题讨论】:
-
我们在谈论什么异常?
-
是什么让你觉得你在主线程中抓住了它?
-
主线程只能捕获构造函数内部或
start内部发生的异常(例如,没有足够的可用内存来创建另一个线程)。您不会看到来自run的异常。 -
Re, "...child thread..." 知道线程 B 是由线程 A 创建的可能对你有意义,但 JVM 并不关心。将线程中未捕获的异常重新抛出到“父”线程中没有意义有几个原因,但在 Java 中,其中一个原因是 JVM 甚至不会记住哪个线程是“父母。”
标签: java multithreading