我写了一段Java代码来测试线程,比如:
public static void main(String[] args) {
Thread t = new Thread(() -> {
throw new NullPointerException();
});
t.setDaemon(true);
t.start();
}
我希望看到类似的内容:
Exception in thread "Thread-0" java.lang.NullPointerException
at com.cisco.ruan.nio.Java8Time.lambda$0(Java8Time.java:23)
at java.lang.Thread.run(Thread.java:745)
但除非我发表评论t.setDaemon(true);
,否则不打印任何内容。
我的问题是为什么在守护程序线程中弹出异常时没有消息。这种设计的目的是什么?
答案 0 :(得分:3)
这是因为JVM
将在抛出异常之前退出,或者记录。
引自https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#setDaemon(boolean)
The Java Virtual Machine exits when the only threads running are all daemon threads.
尝试在Thread.sleep(1000)
之后立即t.start()
查看邮件是否已记录。