使用Java杀死正在运行的VM(JBoss Instance)上的线程?

cwa*_*ash 7 java jboss monitoring recovery

一个在第三方库的bug导致在我的JBoss的实例的工作线程无限循环.你知道如何在不重新启动服务器的情况下杀死这个"卡住"的线程吗?我们希望能够从此恢复直到部署修复程序,最好不必重新启动.

我见过一些人提到使用Thread.interrupt() - 如果我要编写自己的MBean代码,为了打断它,我怎样才能获得有问题的线程的句柄?

更新:无法使用任何这些方法解决.我确实遇到了另一个关于同一问题的线程,该问题有一个链接到为什么不推荐使用Thread.stop().其他人也提出了类似的问题并得到了类似的结果.似乎更复杂的容器应该提供这种健康机制,但我猜他们的手与JVM绑在一起.

Dan*_*iel 1

您可以使用不鼓励的 myThread.stop() 方法。但是很可能该线程仍然在那里被引用,因此您应该使用一些反射魔法从持有该线程的组件中删除对该线程的所有引用。

如何找到话题?使用 Thread.getThreadGroup() 和 ThreadGroup.getThreadGroup() 向上到根 ThreadGroup(),然后使用 iterate() 函数遍历所有线程。