【发布时间】:2018-02-19 19:36:34
【问题描述】:
有时,Java 应用程序的系统进程不会完全关闭。这主要是因为一个或多个线程没有死。
可以调用:
System.exit(0);
但这会杀死所有线程。
我希望我的所有线程都能正确关闭,所以我不打算使用 System.exit。但有时由于环境的原因,一个或多个线程不会正确死亡。这会导致应用程序无法完全关闭并在后台逗留,有时甚至会锁定资源。
我的第一个想法是编写一个 ExitWatcher,它在程序停止时启动,并在 10 秒后调用 system.exit(如果程序仍然存在)。我很快发现 ExitWatcher 现在可以阻止程序关闭 ;-)
如何给 java 程序正确关闭的时间(即正确关闭所有线程),但同时有一个备份计划,如果关闭时间太长,则调用 System.exit?
【问题讨论】:
-
正如 Kayaman 提到的,我认为您可以将 ExitWatcher 线程设置为守护进程,但整个想法也令人担忧。如果某些重要数据的保存时间超过 10 秒(比如通过慢速网络连接)怎么办?好像你只是在踢自己的脚。最好专注于单个线程,并确保它们在完成后都会退出。
标签: java multithreading