多线程---写一个死锁案例并排查

案例

public class DeadLockExe {
    public static void main(String[] args) {
        Object lock1 = new Object();
        Object lock2 = new Object();

        new Thread(() -> {
            synchronized(lock1) {
                System.out.println("thread A get lock1");
                try {
                    Thread.sleep(100);
                } catch(Exception e) {
                    e.printStackTrace();
                }
                synchronized(lock2) {
                    System.out.println("thread A get lock2");
                }
            }
        }).start();

        new Thread(() -> {
            synchronized(lock2) {
                System.out.println("thread B get lock2");
                try {
                    Thread.sleep(100);
                } catch(Exception e) {
                    e.printStackTrace();
                }
                synchronized(lock1) {
                    System.out.println("thread B get lock1");
                }
            }
        }).start();
    }
}

排查

1. Terminal命令行排查

jps -l 获取进程编号

多线程---写一个死锁案例并排查_第1张图片

jstack 进程编号 排查(这里是12888)
多线程---写一个死锁案例并排查_第2张图片

2. 图形化界面排查

CMD: jconsole

多线程---写一个死锁案例并排查_第3张图片

你可能感兴趣的:(要点,java,jvm,开发语言)