终极答案
上面说这个例子,其实我就是想引出终极答案。
终极答案就是:dispatchUncaughtException 方法。
为什么这样说呢?
我们现在把情况分为三种。
第一种:submit 方法提交一个会抛出运行时异常的任务,捕不捕获异常都可以。
第二种:execute 方法提交一个会抛出运行时异常的任务,不捕获异常。
第三种:submit 或者 execute 提交,让线程池饱和之后抛出拒绝异常,代码没有捕获异常。
第一种情况,无论如何都不会触发 dispatchUncaughtException 方法。因为 submit 方法提交,不论你捕获与否,源码里面都帮你捕获了:
第二种情况,如果不捕获异常,会触发 dispatchUncaughtException 方法,因为 runWorker 方法的源码里面虽然捕获了异常,但是又抛出去了:
你肯定知道这是会抛出异常的吧。
就像这样式儿的:
我们完全没有打印日志的代码吧?
那你现在知道控制台这个异常信息是怎么来的了不?
最后说一句(求关注)
还记得我之前这篇文章中的一个对话截图吗:
写这篇文章的时候我又问了她近况,她已经不在乎这些技术问题了,因为她从程序媛摇身一变,变成了产品汪。从需求实现方变成了需求输出方,真是一个华丽的转身啊:
才疏学浅,难免会有纰漏,如果你发现了错误的地方,可以在留言区提出来,我对其加以修改。 感谢您的阅读,我坚持原创,十分欢迎并感谢您的关注。
我是 why,一个被代码耽误的文学创作者,不是大佬,但是喜欢分享,是一个又暖又有料的四川好男人。