【发布时间】:2015-09-19 03:25:32
【问题描述】:
我有一个独立的 Java 应用程序,它充当连接到 ActiveMQ 队列的消费者。在我的应用程序的main() 方法中,我创建了一个消费者实例作为线程并启动它。
看到我为此使用 JMS,我想向我的应用程序添加一个关闭挂钩,以便当我的应用程序停止工作(终止或终止)时,我的应用程序将运行一些方法,其中我的所有资源都将被关闭.
我已经尝试过Runtime.addShutdownHook(),但每当我关闭我的应用程序时似乎都没有调用它。
我希望它的行为就像调用了 ServletContextListener 的 contextDestroyed() 方法一样。
【问题讨论】:
-
您究竟是如何关闭应用程序的?没有办法添加一个保证在每个关闭方法中运行的钩子;操作系统可以简单地终止应用程序的进程,而不允许任何代码运行。
-
好吧,现在因为我只是在开发,我使用 Eclipse 来运行和终止我的应用程序。一旦我最终将它打包到 JAR 中,我很可能会使用 linux shell 运行它并使用 Ctrl+C 终止它。
-
Runtime.addShutdownHook()将仅在正常关机的情况下被调用,即当您执行 CTRL+C 或 Kill 时,但如果您执行硬关机,即在 Kill -9 的情况下,不会调用此 shutdownHook。
标签: java multithreading jms