有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中跟踪消失线程的多线程处理

我有一根线突然在我身上消失了

线程主循环类似于:

    while (true) {
        try {
            <snip>
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }

我开始是这样的:

    thread.setUncaughtExceptionHandler((thread, throwable) -> {
        throwable.printStackTrace();
    });

我有一个非常可重复的情况,在这种情况下,程序停止工作,当我调用Eclipse调试器时,这个线程就不存在了

这是如何发生的,我如何跟踪它,我本以为我的代码会捕获线程可能退出的所有可能方式,我会得到正在发生的事情的堆栈跟踪


共 (1) 个答案

  1. # 1 楼答案

    尝试用Try/finally块在最高级别包装尽可能多的代码。当代码退出块系统时,应始终捕获此消息。调用exit()

    正如您所发现的,代码可能会以静默方式退出的一种方式是,如果您在没有意识到的情况下使用了return;


    未捕获的异常处理程序将仅处理未捕获的异常。在这种情况下,您似乎捕获了所有异常

    在线程中存在未捕获异常时调用的方法

    /**
     * Dispatch an uncaught exception to the handler. This method is
     * intended to be called only by the JVM.
     */
    private void dispatchUncaughtException(Throwable e) {
        getUncaughtExceptionHandler().uncaughtException(this, e);
    }