首页 > 解决方案 > 当我关闭我的应用程序时线程停止

问题描述

我有一个问题:我的独立 java 应用程序运行一个线程,该线程需要休眠 30 分钟,然后它运行一些代码行,例如更新数据库。

但是当我关闭我的应用程序时,我认为线程被杀死是因为数据库上没有超过 30 分钟的更新。

那么,当我关闭主线程时,如何保持线程处于活动状态?

另一个问题:如果我从任务管理器中终止子线程,我的应用程序逻辑就会损坏。因此我需要改变我的意思的逻辑。哪个是解决此问题的可能解决方案?

标签: javamultithreading

解决方案


如果您 System.exit() 您的应用程序,或者您的机器或操作系统崩溃或关闭,则没有避免挂起工作中止的好方法。

您可以做的最好的事情是记录需要持续完成某事的事实并定期检查。

如果您特别想知道线程终止,这个想法是 Java 运行时会在没有非守护线程时立即终止。所以如果你让你的睡眠线程不是一个守护进程,它会阻止虚拟机自行结束。但是,这种机制相当可疑,因为您无法很好地控制它何时结束。

如果这是一个 GUI 应用程序,您必须在调用 System.exit 之前检查自己是否有待处理的工作并拒绝关闭请求。

只是为了完整起见,还有关闭钩子,但在其中做繁重的工作并不是一个好主意,因为它们不能无限期地延迟关闭。


推荐阅读