Java检测死锁的三种方法

这里写目录标题

在学习并发的时候,对于死锁情况的检测有三种方式

测试案例

public class DeadLockDemo {
    private static String A = "A";
    private static String B = "B";

    public static void main(String[] args) {
        new DeadLockDemo().deadLock();
    }

    private void deadLock() {
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (A) {
                    try {
                        Thread.currentThread().sleep(2000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (B) {
                        System.out.println("1");
                    }
                }
            }
        });
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (B) {
                    synchronized (A) {
                        System.out.println("2");
                    }
                }
            }
        });
        t1.start();
        t2.start();
    }
}

jvisualvm

JVM 监控工具,可以监控 CPU ,内存,类,线程等运行状况,实时监控服务器性能

步骤

  • 从你的jdk下载目录下,找到bin目录下的jvisualvm.exe
  • 双击打开,可以看到运行的java程序

打开jvisualvm时的界面
在这里插入图片描述

当,跑起来死锁的demo后左边的目录会有显示,双击可以看到左边详细信息,在线程子界面下,显示检测的了死锁,点击线程Dump可以看具体在哪

在这里插入图片描述

显示如下:

在这里插入图片描述

jconsole

jconsole是jdk自带的内置java性能分析器,用来监控Java应用程序的性能和跟踪Java中的代码.

步骤

  • 可以使用cmd ,输入jconsole,打开
  • 可以在jconsole界面看到demo,选择连接本地进程

jconsole界面
在这里插入图片描述
连接
在这里插入图片描述
在线程子界面,点击检测死锁,就能显示死锁的线程
在这里插入图片描述

jstack

jstack是java虚拟机自带的一种堆栈跟踪工具。

步骤

  • 先用jps查看进程pid信息
  • 使用jstack -l [pid]查看其中的线程信息,可看到Found one Java-level deadlock:及具体的死锁信息展示

演示

输入jps,查看pid,可以看到我的DeadLockDemo的pid是42980。

在这里插入图片描述

查看线程信息,使用都jstack -l 42980
最后一个是demo的pid,根据自己的pid填写

在这里插入图片描述

它会直接显示到死锁信息部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值