java - 通过清理杀死一个可运行的 jar ?

标签 java multithreading jar kill java-threads

我是多线程和在服务器上部署代码领域的新手。我有一个有主线程的项目。该主线程有一个由 10 个其他线程组成的线程池,这些线程使用 SNMP“查询”不同的硬件。然后这些线程会执行一些数据库操作,并且该数据库会转到 Web 应用程序前端。主线程使用调度程序使任务永远运行并每 15 秒重复一次。

在 Eclipse 中,我导出了一个可运行的 .jar 并使用“nohup java -jar nameOfJar.jar &”在服务器上运行它。现在要杀死这个进程,我使用“ps -ef | grep java”来查看 nameOfJar.jar 正在运行的 PID,并使用“kill PIDofNameOfJar”来实际杀死该进程。我是多线程新手,想知道当我使用kill命令时线程会发生什么。是否对它们进行了清理?或者我应该有代码来处理这个问题?或者我不应该使用kill命令来停止可运行的jar?

我在想,由于我正在终止主进程,因此其他 10 个线程如果已发送出去,也不会被终止,但我不确定。

如有任何帮助,我们将不胜感激!

最佳答案

除了释放 JVM 持有的资源(所以基本上是分配的内存,可能是套接字和文件 Hook )之外,没有其他清理工作。任何其他资源(例如提交或中止数据库事务)都必须在此之前完成,因为这不会自动发生。

您可以通过 Runtime.addshutdownhook() 将自己连接到 JVM 关闭过程。这个钩子(Hook)将在 JVM 关闭时执行(不是由于 JVM 错误而异常),例如。当 sigterm 发送到 JVM 时。您可以在那里进行清理。

关于java - 通过清理杀死一个可运行的 jar ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35514818/

相关文章:

java swing边框,使用2种或多种颜色

java - 滑动刷新后加载更多不起作用

java - 批量发布 Ionic 应用程序

Java - 在 pom.xml 中添加 jar 依赖

java - Android 以编程方式向工具栏添加按钮

java - 将 Maven 标记中的两个标志添加到 SkipTests

java - 如何确保 Java 中的内存可见性?

python - 为什么方法 sys.exit()、exit()、raise SystemExit 不起作用?

Python:在主线程中执行回调方法

java - 无法使用相对路径从资源文件夹获取 JSON 文件