如何在Java中杀死死锁线程?

时间:2009-12-04 22:09:54

标签: java multithreading deadlock interrupt

我想杀死陷入死锁状态的线程。首先,我们可以detect thread ids in deadlock state使用findDeadlockedThreads()ThreadMXBean类的java.lang.management方法。

然后,我想通过线程ID杀死线程,因此我有两个相关的问题:
(1)如何通过线程id控制线程?
(2)如何杀死被阻塞的线程?我认为调用interrupt()方法会给线程一个异常,并会杀死线程。

3 个答案:

答案 0 :(得分:6)

java.util.concurrent.Lock.lockInterruptibly()方法是可中断的,更常见的同步锁定不是。正如文档中所提到的,枚举死锁线程的能力旨在作为调试辅助工具,而不是在生产环境中进行恢复的手段。

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

答案 1 :(得分:3)

从根线程组中,您可以拥有Thread类enumerate all running threads。然后,您可以在与您的ID匹配的那个上调用Thread.stop。

话虽如此,由于可能会使对象处于不一致状态,因此非常危险。我不相信中断方法会导致线程被释放而等待同步锁定,所以(邪恶)停止方法

另请参阅:“Java Thread Primitive Deprecation”。

答案 2 :(得分:2)