我是多线程和在服务器上部署代码的新手。我有一个有主线程的项目。这个主线程有一个10个其他线程的线程池,"查询"使用SNMP的不同硬件。那些线程然后做一些数据库的东西,该数据库转到webapp前端。主线程使用调度程序使任务保持运行,并且每15秒重复一次。
在eclipse中,我导出了一个可运行的.jar,并使用" nohup java -jar nameOfJar.jar&"在服务器上运行它。现在要杀死这个过程,我使用" ps -ef | grep java"查看nameOfJar.jar正在运行的PID并使用" kill PIDofNameOfJar"实际上杀了这个过程。我是多线程的新手,我想知道当我使用kill命令时线程会发生什么。是否对它们进行了清理?或者我应该有代码来处理这个?或者我应该不使用kill命令来停止一个可运行的jar?
我在想,因为我正在杀死主进程,所以如果它们被发送出去,其他10个线程将不会被终止,但我不确定。
任何帮助将不胜感激!
答案 0 :(得分:0)
除了释放JVM所拥有的资源(基本分配的内存,可能是套接字和文件钩子)之外,没有其他清理工作。任何其他资源(如提交或中止数据库事务)必须在此之前完成,因为这不会自动发生。
您可以通过Runtime.addshutdownhook()
将自己挂钩到JVM关闭过程。这个钩子将在JVM关闭时执行(不会因为JVM错误而异常),例如。当sigterm发送到JVM时。你可以在那里进行清理。