本文介绍了java中的编程死锁检测的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我如何以编程方式检测到 Java 程序中发生了死锁?

How can I programmatically detect that a deadlock has occurred in a Java program?

推荐答案

您可以使用 JDK 附带的 ThreadMXBean 以编程方式执行此操作:

You can do this programmatically using the ThreadMXBean that ships with the JDK:

ThreadMXBean bean = ManagementFactory.getThreadMXBean();
long[] threadIds = bean.findDeadlockedThreads(); // Returns null if no threads are deadlocked.

if (threadIds != null) {
    ThreadInfo[] infos = bean.getThreadInfo(threadIds);

    for (ThreadInfo info : infos) {
        StackTraceElement[] stack = info.getStackTrace();
        // Log or store stack trace information.
    }
}

显然,您应该尝试隔离执行此死锁检查的线程 - 否则,如果该线程死锁,它将无法运行检查!

Obviously you should try to isolate whichever thread is performing this deadlock check - Otherwise if that thread deadlocks it won't be able to run the check!

顺便说一下,这就是 JConsole 在幕后使用的东西.

Incidentally this is what JConsole is using under the covers.

这篇关于java中的编程死锁检测的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-16 06:06