java - 当我关闭我的应用程序时线程停止
问题描述
我有一个问题:我的独立 java 应用程序运行一个线程,该线程需要休眠 30 分钟,然后它运行一些代码行,例如更新数据库。
但是当我关闭我的应用程序时,我认为线程被杀死是因为数据库上没有超过 30 分钟的更新。
那么,当我关闭主线程时,如何保持线程处于活动状态?
另一个问题:如果我从任务管理器中终止子线程,我的应用程序逻辑就会损坏。因此我需要改变我的意思的逻辑。哪个是解决此问题的可能解决方案?
解决方案
如果您 System.exit() 您的应用程序,或者您的机器或操作系统崩溃或关闭,则没有避免挂起工作中止的好方法。
您可以做的最好的事情是记录需要持续完成某事的事实并定期检查。
如果您特别想知道线程终止,这个想法是 Java 运行时会在没有非守护线程时立即终止。所以如果你让你的睡眠线程不是一个守护进程,它会阻止虚拟机自行结束。但是,这种机制相当可疑,因为您无法很好地控制它何时结束。
如果这是一个 GUI 应用程序,您必须在调用 System.exit 之前检查自己是否有待处理的工作并拒绝关闭请求。
只是为了完整起见,还有关闭钩子,但在其中做繁重的工作并不是一个好主意,因为它们不能无限期地延迟关闭。
推荐阅读
- react-navigation - 有没有办法查看 React Navigation v5 的导航堆栈中是否存在屏幕/路线?
- python - 使用正则表达式在python中重命名文件
- c++ - ROS CPP Snap7 Linux - CMake 未链接到 lib
- ios - Xcode 我的应用程序无法在 iPad 模拟器中运行,但可以在 iPhone 模拟器中运行
- spring - 无法实例化 [org.nvkr.Triangle]:构造函数是否可访问?嵌套异常是 java.lang.IllegalAccessException:
- python - gitpython:如何认证为 Github 应用程序?
- css - 如何在 CSS 中制作轨道?
- r - Ctree R 函数不适用于我的 for 循环
- python - Python无法逐行执行代码并通过读取、写入、复制和删除文件夹和csv文件导致找不到文件夹错误
- c++ - c++ 继承问题和指针。尝试使用指针访问子类,但无法找到该函数