有没有办法在正在运行的JVM中中断睡眠线程,而无法访问应用程序的代码?

时间:2012-09-01 01:01:38

标签: java

Eclipse 3.7.2在Solaris 11 X86中出现错误 - 它的主线程随机进入睡眠状态,永远不会从中唤醒。我希望中断睡眠,以便主线程继续运行。有可能吗?

此处有更多详情:Eclipse hangs forever, thread dump says main thread is sleeping

2 个答案:

答案 0 :(得分:3)

我认为中断正在运行您未编写的代码的线程并不是一个好主意 - 您可能会导致死锁,损坏数据结构等。或者它可能是良性的。但这是你的风险......

是的,可以做你想做的事。如果您可以在该应用程序中运行自己的一些代码,那么您可以监视线程,直到您看到一个具有特定名称且已经长时间休眠的线程,然后通过以下方式中断它:

Thread.enumerate()
Thread.getName()
Thread.interrupt()

要使代码与程序的其余部分同时运行,您可以修改启动程序:修改类路径,使用main方法创建一个类,该方法启动您自己的监视线程,然后调用真正的主方法。

或者,您可以将监视线程编写为Java代理并使用“-javaagent”开关。有关详细信息,请参阅http://docs.oracle.com/javase/7/docs/api/java/lang/instrument/package-summary.html

答案 1 :(得分:0)

在Eclipse的情况下,你>> DO<<可以访问代码...因为Eclipse是开源的。

下载代码,修改代码(例如实现监视程序)并重建代码可能会更好/更清洁/更简单。

您可能还应将此报告为Eclipse错误。