Java 用清理来杀死一个可以运转的罐子?

Java 用清理来杀死一个可以运转的罐子?,java,multithreading,jar,kill,java-threads,Java,Multithreading,Jar,Kill,Java Threads,我对多线程和在服务器上部署代码的世界还很陌生。我有一个有主线的项目。这个主线程有一个由10个其他线程组成的线程池,这些线程使用SNMP“查询”不同的硬件。然后,这些线程会执行一些数据库操作,然后数据库就会进入webapp前端。主线程使用调度程序使任务永远运行,并每15秒重复一次 在eclipse中,我导出了一个runnable.jar,并使用“nohupjava-jarnameofjar.jar&”在服务器上运行它。现在,为了终止这个进程,我使用“ps-ef | grep java”来查看nam

我对多线程和在服务器上部署代码的世界还很陌生。我有一个有主线的项目。这个主线程有一个由10个其他线程组成的线程池,这些线程使用SNMP“查询”不同的硬件。然后,这些线程会执行一些数据库操作,然后数据库就会进入webapp前端。主线程使用调度程序使任务永远运行,并每15秒重复一次

在eclipse中,我导出了一个runnable.jar,并使用“nohupjava-jarnameofjar.jar&”在服务器上运行它。现在,为了终止这个进程,我使用“ps-ef | grep java”来查看name of jar.jar在哪个PID上运行,并使用“kill-PIDofNameOfJar”来实际终止这个进程。我是多线程新手,不知道使用kill命令时线程会发生什么变化。对他们进行了清理吗?或者我应该有代码来处理这个问题?或者我不应该使用kill命令来停止一个可运行的jar

我认为,由于我正在终止主进程,如果其他10个线程被发送出去,它们将不会被终止,但我不确定


任何帮助都将不胜感激

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


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

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

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