我想杀死那些停留在僵局状态的线程。首先,我们可以检测死锁状态的线程ID 使用findDeadlockedThreads()ThreadMXBean类的java.lang.management方法。

然后,我想通过杀死线程ID线程,因此我有两个相关的问题:点击 (1)如何获得通过线程ID线程的控制?点击 (2)如何杀死一个阻塞的线程?我认为invokting中断()方法将得到的例外线程和将杀死线程。

有帮助吗?

解决方案

从根线程组,你可以有Thread类枚举所有正在运行的线程。然后,你可以调用使用Thread.stop对你的ID相匹配的。

话虽如此,这是非常危险的,由于离开处于不一致的状态的对象的可能性。我不相信该中断方法将导致一个线程被释放滞留在等待一个同步锁,所以(恶)停止方法

另请参见:“ Java线程原始弃用”。

其他提示

在java.util.concurrent.Lock.lockInterruptibly()方法是可中断的,则更为常见同步锁定不是。如文档中所提及的,枚举死锁线程的能力的目的是作为调试辅助而不是在生产环境中恢复的装置。

在生产它可能是更安全的退出整个过程并重新启动。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top