0

我的应用程序启动了一个使用阻塞队列的守护线程。当使用 kill -3 杀死它时,应用程序不会完全停止,并且生成的堆栈显示它仍在等待BlockingQueue.take()

任何有助于彻底关闭的建议将不胜感激

4

2 回答 2

1

你说...

...When it is killed using kill -3, the app doesnt stop cleanly and the...

通常,使用 Kill -3 不会终止 Java 应用程序。

Kill SIGQUIT (-3) 用于获取 Java 线程转储。

尝试使用 kill -9 或 -15

如果启用了一些特殊的信号处理钩子,这种行为可能会改变。

编辑:

此外,受控、干净的 Java 应用程序关闭源自应用程序内。
看看如何在 Java 中优雅地处理 SIGKILL 信号

于 2013-03-22T13:08:13.523 回答
0

BlockingQueue#take响应中断,因此您只需要确保中断执行该take方法的线程并充分处理抛出InterruptedException的问题(即退出该方法)。

如果有问题的线程由线程池管理,您可以shutdownNow使用该池,这也会中断线程。

于 2013-03-22T16:08:47.730 回答