出错时退出JVM

时间:2011-10-16 06:27:44

标签: jvm

我正在处理这个需要加载本机库的应用程序。启动加载本机库的类的加载正在与主线程不同的线程上运行。 当发生错误(抛出错误)时,我会期望vm终止,但在这种情况下它不会。当然,当我无法加载本机库时,我不能继续,因为那是应用程序的核心。 我假设我的应用程序没有终止,因为主线程启动至少3个线程。连接线程 - 如果已连接小工具则侦听,然后通知侦听器已连接或断开连接,以及其他资源管理线程。

当jls说应用程序不应该尝试捕获错误时,我将如何结束我的应用程序?

1 个答案:

答案 0 :(得分:1)

为了正确回答您的问题,我需要了解有关您生成的其他主题的更多信息。它们可以设置为守护程序类型的线程吗?如果没有,你通常如何优雅地退出这些线程?

这是一种强力方式(在加载本机库的线程内):

try {
    methodToLoadLibrary();
    doWhatYouNeedToDo();
} finally {
    System.exit(1);
}

但是这假设您将在此线程终止时退出整个过程。

如果你有一个方法可以调用以使线程正常终止,你可以用这个替换System.exit(1);调用:

Collection<Stoppable> sList;
for(Stoppable s : sList) {
    s.stop();
}

其中Stoppable是用于通信的接口,您希望在这些线程上正常关闭。

还有一些不那么干净的方法,比如在其他线程上调用Thread.stop