gpt4 book ai didi

java - 有效地使用 UncaughtExceptionHandler

转载 作者:行者123 更新时间:2023-11-29 08:19:21 26 4
gpt4 key购买 nike

我最近了解了 Java 1.5 的这个功能,并开发了一个示例代码来使用它。我的目标是在线程因未捕获的异常而死亡时重新启动线程。

public class ThreadManager {

public static void main(String[] args) throws InterruptedException {
startThread();
}

public static void startThread(){
FileReaderThread reader = new FileReaderThread("C:\\Test.txt");
Thread thread = new Thread(reader);
thread.setUncaughtExceptionHandler(new CustomExceptionHandler());
thread.start();
}
}

这里的文件读取器只是包含一个读取文件和打印内容的例程。我通过在该类中使文件名为 null 来模拟未捕获的异常。

那么我的CustomExceptionHandler类如下。

public class CustomExceptionHandler implements Thread.UncaughtExceptionHandler {

public void uncaughtException(Thread t, Throwable e) {
ThreadManager.startThread();
}
}

但是在这里我观察到一个问题。在未捕获的异常之后,线程处于 hibernate 状态。我使用探查器验证了它。所以创建新线程会随着时间填满我的内存。使 system.gc() 后接 t = null 无效。

那么您建议处理这种情况的最佳方法是什么?我只需要一个新线程,我不再需要任何旧线程....

谢谢

最佳答案

我建议的方法是不要让异常从您的线程中泄漏出来。未捕获的异常处理程序是一个很好的工具,但是,如果您使用它来确保您的线程正在运行,我建议您遇到设计或代码问题。您的线程快死了,简单地忽略它并在其位置重新启动一个新线程可能不是您想要做的,即使您能够找出 hibernate 线程问题。

想象一下,问题不是在您的线程中,而是您的 main() 方法 - 您是否会让相同的异常一直泄漏并终止您的应用程序?如果不是,您将如何缓解该问题?您不会编写再次调用 main() 的异常处理程序吧?无论您要做什么,那都是您应该在线程中做的。

关于java - 有效地使用 UncaughtExceptionHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1535923/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com