如何检测是否有另一个java线程被挂起或冻结?

时间:2015-02-19 23:12:42

标签: java multithreading 3d mouse frozen

我搜索并找到了通过向其添加布尔值来确定是否已暂停另一个线程的方法。但是,我不希望(不愿意)修改其他线程的代码。并且,我需要检测它是否因任何原因被冻结(即使是一个错误,所以在这种情况下,其他线程也可能没有响应)。

我看到eclipse是如何做到的,并显示应用程序的线程没有响应,我想知道他们是如何编码的。

动机:我需要这个从3D lwjgl应用程序中释放鼠标(取消它),这必须独立于任何IDE,应用程序本身必须这样做。我正在尝试监视主应用程序线程。

2 个答案:

答案 0 :(得分:1)

虽然不一定是最好的主意,但您可以使用Thread#getState()来查看主题的当前状态。

但是,这将取决于线程的上下文。如果它因为无法突破循环而被冻结,则此方法无法工作。另外,如果它只是等待一个锁或一个有界集合,那将是一个错误的调用。

线程应处于以下3种状态:BLOCKEDWAITINGTIMED_WAITING

答案 1 :(得分:0)

在Powershell或命令提示符中,您可以使用JPS列出当前正在运行的所有Java线程。然后使用jstack“ pid” ..这将列出在该线程下运行的所有线程。他们的状态也会写在他们旁边。