使用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()了,我真的不想在上面的例子中使用它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |