美文网首页
Java死锁检测之ThreadMXBean

Java死锁检测之ThreadMXBean

作者: touch_The_Sky | 来源:发表于2018-11-07 11:45 被阅读0次

看此文章前请先了解之前一篇文章 "Java死锁之理解死锁" 中的死锁示例
java 中提供了可以检测死锁的工具类ThreadMXBean,我们可以用它来在项目运行时期使用代码去检测是否有死锁存在.
下面这段代码请参考"理解java线程死锁"这篇文章,我们在其中添加了使用ThreadMXBean获取死锁信息的代码

public class TestThread {
    
    public static final Object lock1 = new Object();//锁对象1
    public static final Object lock2 = new Object();//锁对象2
     //获取ThreadMXBean
    public static ThreadMXBean mbean = ManagementFactory.getThreadMXBean();
    //测试方法
    public static void main(String[] args) throws InterruptedException {
        //启动死锁线程
        new A("A").start();
        new B("B").start();
        //等待一段时间再执行死锁检测
        Thread.sleep(200);
        //获取到所有死锁线程的id
        long[] deadlockedThreads = mbean.findDeadlockedThreads();
        //遍历数组获取所有的死锁线程详细堆栈信息并打印
        for (long pid : deadlockedThreads) {
            //此方法获取不带有堆栈跟踪信息的线程数据
            //hreadInfo threadInfo = mbean.getThreadInfo(pid);
            //第二个参数指定转储多少项堆栈跟踪信息,设置为Integer.MAX_VALUE可以转储所有的堆栈跟踪信息
            ThreadInfo threadInfo = mbean.getThreadInfo(pid,Integer.MAX_VALUE);
            System.out.println(threadInfo);
        }
    }
}

打印出的死锁线程信息如下: 其中 "B" , "A" 是我的死锁示例中两个线程的名字

"B" Id=14 BLOCKED on java.lang.Object@58d25a40 owned by "A" Id=13
    at test.B.run(TestThread.java:70)
    -  blocked on java.lang.Object@58d25a40

"A" Id=13 BLOCKED on java.lang.Object@726f3b58 owned by "B" Id=14
    at test.A.run(TestThread.java:47)
    -  blocked on java.lang.Object@726f3b58

PS:检测死锁和获取堆栈信息是比较费性能的操作,如非必要不要经常执行

相关文章

  • Java死锁检测之ThreadMXBean

    看此文章前请先了解之前一篇文章 "Java死锁之理解死锁" 中的死锁示例java 中提供了可以检测死锁的工具类Th...

  • JAVA36讲

    1.死锁:java提供的api:ThreadMXBean 2.trylock的诀窍: 3.synchronized...

  • 利用ThreadMXBean实现检测死锁

    在使用JConsole的时候,在线程页下,可以看到一个检测死锁按钮,很好奇它是如何获取死锁线程的。同时检测死锁算法...

  • Java死锁检测方式JConsole

    Java死锁检测方式之JConsole 我们在开发中应该尽量避免死锁,但是如果真的有死锁产生那么我们怎么在一个复杂...

  • 如何去检测死锁

    如何检测死锁 死锁预防 让线程获取锁的顺序一致 死锁检测 jps 查看java 进程信息 jstack +进程号 ...

  • JVM_JMM: 死锁的检测

    死锁的示例代码: 通过jconsole来检测死锁: 名称: Thread-1状态: java.lang.Class...

  • Java死锁检测之JStack

    JStack 是JDK自带的命令行工具,主要用于线程Dump分析。(Dump文件是进程的内存镜像。保存的是进程的执...

  • Java concurrency《防止死锁》

    Java concurrency《防止死锁》 常见预防死锁的办法 有顺序的锁 具有超时时间的锁 死锁的检测 有顺序...

  • [现代操作系统]--死锁

    table of content 死锁定义 死锁建模-- 资源分配图 处理死锁鸵鸟算法检测并恢复死锁检测死锁恢复利...

  • 003 线程活跃性 | 死锁 | 活锁 | 饥饿 | 无锁

    死锁 两个或多个线程相互等待对方释放锁,则会出现死锁现象。java虚拟机没有检测,也没有采用措施来处理死锁情况,所...

网友评论

      本文标题:Java死锁检测之ThreadMXBean

      本文链接:https://www.haomeiwen.com/subject/wkhwlftx.html