我正在研究这个需要加载本地库的应用程序。启动本机库加载的类的加载在与主线程不同的线程上运行。当发生错误(抛出错误)时,我期望vm终止,但在这种情况下它没有。当然,当我不能加载本机库时,我不能继续,因为这是应用程序的核心。我假设我的应用程序没有终止,因为主线程至少启动了3个线程。连接线程——侦听一个小部件是否已连接,然后通知侦听器它已连接或已断开,以及其他资源管理线程。
当jls说应用程序不应该尝试捕获错误时,我该如何结束我的应用程序?
为了正确回答您的问题,我需要了解有关您生成的其他线程的更多信息。可以将它们设置为守护进程类型的线程吗?如果不是,通常如何优雅地退出这些线程?
这是一种暴力方法(在加载本机库的线程中):
try {
methodToLoadLibrary();
doWhatYouNeedToDo();
} finally {
System.exit(1);
}
,但这是假设你将退出整个进程,当这个线程终止。
如果你有一个方法可以调用使线程优雅地终止,你可以替换System.exit(1);
调用:
Collection<Stoppable> sList;
for(Stoppable s : sList) {
s.stop();
}
其中Stoppable
是用于通信的接口,用于在这些线程上进行安全关闭。
还有一些不太干净的方法,比如在其他线程上调用Thread.stop
。