微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/java/129619.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐