Java 中的死锁检测
2022-08-31 15:06:58
很久以前,我从Java参考书中保存了一句话:“Java没有处理死锁的机制。它甚至不会知道发生了死锁。“(Head First Java 2nd Edition, p.516)
那么,它是什么呢?有没有办法在Java中捕获死锁情况?我的意思是,有没有办法让我们的代码理解发生死锁的情况?
很久以前,我从Java参考书中保存了一句话:“Java没有处理死锁的机制。它甚至不会知道发生了死锁。“(Head First Java 2nd Edition, p.516)
那么,它是什么呢?有没有办法在Java中捕获死锁情况?我的意思是,有没有办法让我们的代码理解发生死锁的情况?
从 JDK 1.5 开始,包中有非常有用的方法来查找和检查发生的死锁。请参阅类的 和 方法。java.lang.management
findMonitorDeadlockedThreads()
findDeadlockedThreads()
ThreadMXBean
使用此功能的一种可能方法是使用单独的监视程序线程(或定期任务)来执行此操作。
示例代码:
ThreadMXBean tmx = ManagementFactory.getThreadMXBean();
long[] ids = tmx.findDeadlockedThreads();
if (ids != null) {
ThreadInfo[] infos = tmx.getThreadInfo(ids, true, true);
System.out.println("The following threads are deadlocked:");
for (ThreadInfo ti : infos) {
System.out.println(ti);
}
}