我想杀死陷入死锁状态的线程。首先,我们可以detect thread ids in deadlock state使用findDeadlockedThreads()
中ThreadMXBean
类的java.lang.management
方法。
然后,我想通过线程ID杀死线程,因此我有两个相关的问题:
(1)如何通过线程id控制线程?
(2)如何杀死被阻塞的线程?我认为调用interrupt()方法会给线程一个异常,并会杀死线程。
答案 0 :(得分:6)
java.util.concurrent.Lock.lockInterruptibly()方法是可中断的,更常见的同步锁定不是。正如文档中所提到的,枚举死锁线程的能力旨在作为调试辅助工具,而不是在生产环境中进行恢复的手段。
在生产中,退出整个过程并重新启动可能更安全。
答案 1 :(得分:3)
从根线程组中,您可以拥有Thread类enumerate all running threads。然后,您可以在与您的ID匹配的那个上调用Thread.stop。
话虽如此,由于可能会使对象处于不一致状态,因此非常危险。我不相信中断方法会导致线程被释放而等待同步锁定,所以(邪恶)停止方法
答案 2 :(得分:2)