使用IDEA自带的控制台查看死锁

发布时间 2023-08-29 10:58:19作者: xiaolifc

1. 运行你的程序
代码示例:

public class DeadLockTest {
    static final Object A = new Object();
    static final Object B = new Object();

    public static void main(String[] args) {
        new Thread(() -> {
            synchronized (A) {
                log.debug("t1 lock A");
                try {
                    sleep(1000);
                    synchronized (B) {
                        log.debug("wait get lock B");
                    }
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        }, "t1").start();

        new Thread(() -> {
            synchronized (B) {
                log.debug("t2 lock B");
                try {
                    sleep(1000);
                    synchronized (A) {
                        log.debug("wait get lock B");
                    }
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        }, "t2").start();
    }
}

2. 输入 jps


找到线程信息

3. 输入 jstack [进程号]

4. 查看输出的信息,发现两个线程t1 t2 都是阻塞状态,

并且会提示你 哪里发生了死锁