java 线程分析 jps jstack 分析死锁

jstack可以导出线程信息

在启动java项目时,会打印对应的端口信息,通过端口我们可以查询到对应的进程id
linux下:

netstat -tunlp | grep [port]

windows下:

netstat -ano | findstr [port]

也可以使用jdk提供的工具jps查询进程信息:

jps

然后使用jstack就可以导出对应的线程信息:

jstack [进程id] > [导出文件存储的位置]

测试代码如下:

package com.wk.concurrency.demo;

public class DeadLockDemo {
    public static String a = "A";
    public static String b = "B";

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

    private void deadLock() {
        Thread t1 = new Thread(() -> {
            synchronized (a) {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (b) {
                    System.out.println("1");
                }
            }
        });
        Thread t2 = new Thread(() -> {
            synchronized (b) {
                synchronized (a) {
                    System.out.println("2");
                }
            }
        });
        t1.start();
        t2.start();
    }
}

通过jstack导出dump文件后,可以发现以下内容:

Java stack information for the threads listed above:
===================================================
"Thread-1":
	at com.wk.concurrency.demo.DeadLockDemo.lambda$deadLock$1(DeadLockDemo.java:27)
	- waiting to lock <0x00000007412cd8d0> (a java.lang.String)
	- locked <0x00000007412cd900> (a java.lang.String)
	at com.wk.concurrency.demo.DeadLockDemo$$Lambda$2/804581391.run(Unknown Source)
	at java.lang.Thread.run(Thread.java:745)
"Thread-0":
	at com.wk.concurrency.demo.DeadLockDemo.lambda$deadLock$0(DeadLockDemo.java:20)
	- waiting to lock <0x00000007412cd900> (a java.lang.String)
	- locked <0x00000007412cd8d0> (a java.lang.String)
	at com.wk.concurrency.demo.DeadLockDemo$$Lambda$1/6738746.run(Unknown Source)
	at java.lang.Thread.run(Thread.java:745)

Found 1 deadlock.

可以看到死锁,以及死锁产生的位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值