打印线程池线程抛出的异常,Java的默认行为

时间:2013-06-07 07:38:16

标签: java concurrency

我问了这个问题:Printing the stack trace from a newly created thread when an unchecked exception is thrown in Eclipse

在用户Gray的回复中得到了这个:“默认情况下,没有任何内容可以打印线程池线程抛出的异常。”

我想知道原因。让我感到困惑的是让一个线程池线程抛出一个未经检查的异常并在默认情况下停止工作而不打印任何错误。

2 个答案:

答案 0 :(得分:2)

必须改变程序,例如Thread有一个set(Default)UncaughtExceptionHandler。 有了AOP,人们就可以做到这一点。

答案 1 :(得分:1)

因为如果它打印出来,另一个开发人员会问为什么它会使程序的输出与不需要的堆栈跟踪相混淆,并且通过将堆栈跟踪写入同步的PrintStream来大大降低吞吐量。如果要打印例外,请自行打印。没有什么能阻止你这样做。

你得到的答案显示了如何做到这一点。您还可以使用捕获运行时异常的另一个runnable包装所有runnable,在抛出它们时打印它们,然后重新抛出它们。