Java中跟踪消失线程的多线程处理
我有一根线突然在我身上消失了
线程主循环类似于:
while (true) {
try {
<snip>
} catch (InterruptedException e) {
e.printStackTrace();
} catch (Throwable e) {
e.printStackTrace();
}
}
我开始是这样的:
thread.setUncaughtExceptionHandler((thread, throwable) -> {
throwable.printStackTrace();
});
我有一个非常可重复的情况,在这种情况下,程序停止工作,当我调用Eclipse调试器时,这个线程就不存在了
这是如何发生的,我如何跟踪它,我本以为我的代码会捕获线程可能退出的所有可能方式,我会得到正在发生的事情的堆栈跟踪
# 1 楼答案
尝试用Try/finally块在最高级别包装尽可能多的代码。当代码退出块系统时,应始终捕获此消息。调用exit()
正如您所发现的,代码可能会以静默方式退出的一种方式是,如果您在没有意识到的情况下使用了
return;
未捕获的异常处理程序将仅处理未捕获的异常。在这种情况下,您似乎捕获了所有异常
在线程中存在未捕获异常时调用的方法