为啥我看不到从 java 守护线程抛出的异常 [重复]
Posted
技术标签:
【中文标题】为啥我看不到从 java 守护线程抛出的异常 [重复]【英文标题】:Why can't I see exception thrown out from java daemon thread [duplicate]为什么我看不到从 java 守护线程抛出的异常 [重复] 【发布时间】:2017-12-23 04:22:15 【问题描述】:我写了一段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);
。
我的问题是为什么在守护线程中弹出异常时没有消息。这样设计的目的是什么?
【问题讨论】:
提问前请先搜索SO:***.com/questions/6546193/… 【参考方案1】:这是因为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.
尝试在t.start()
之后立即执行Thread.sleep(1000)
以查看消息是否已记录。
【讨论】:
以上是关于为啥我看不到从 java 守护线程抛出的异常 [重复]的主要内容,如果未能解决你的问题,请参考以下文章