我有一个线程,有时只是静静地死,我想用try / catch块来围绕操作,以找出正在发生的事情而不会杀死线程。
我最初使用try / catch(Exception e)块包围运行中的操作,但关注的是这可能会忽略由run()的依赖项抛出的已检查异常,并且无法正确处理。另一方面,我担心(未经检查)错误也会被吞噬。
有人建议,作为一个短期防御,我应该将当前的run()方法重命名为runInternal(),没有声明检查异常,并将catch / log Throwable放在run()中调用runInternal()。
我不明白这会有什么帮助。
答案 0 :(得分:1)
我想用try / catch块来包围操作以找出答案 什么事情没有杀死线程。
快速回答:你无法保存线程。一旦抛出异常,你作为局外人获得的最多就是堆栈跟踪。
使用runInternal技术进行包装将帮助您记录错误的堆栈跟踪,而不是让线程无声地死掉。
然而,你真正想要做的是附加一个调试器,比如eclipse,并将其设置为暂停捕获和未捕获的异常,直到找到你正在寻找的那个。这将在故障点暂停线程,而不会杀死它。