一个
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()了,我真的不想在上面的例子中使用它.