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

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

我见过一些人mention using Thread.interrupt() – 如果我要编写自己的MBean代码,我怎么能得到一个有问题的线程来处理它以便中断呢?

更新:无法使用任何这些方法解决.我确实遇到了another thread about the same issue,它有一个链接到为什么Thread.stop() is deprecated.其他人有asked a similar question有类似的结果.似乎更复杂的容器应该提供这种健康机制,但我猜他们的手与JVM相关联.

解决方法

我在第三方库中遇到了类似的错误(无限循环).我最终自己应用了修复程序(等待来自第三方lib的人来修复它们的混乱)然后我将修改后的.class放在我的.war中,确保它在伪造之前加载.class(伪造的在伪造的第三方.jar).

这不好但是有效,请看我的问题:

Order of class loading from a .war file

我的意思是:如果你必须等待负责第三方窃听lib的人修理他们的东西,你可能会等待很长时间.我们买不起.我们需要尽快修复.所以我们最终对他们的代码应用补丁/黑客.

例如,你可以在无限循环中添加一个布尔检查,然后当你希望虚假线程“死”时强制循环退出.

请注意,我已经十年没用过不推荐使用的Thread stop()了,我真的不想在上面的例子中使用它.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...