代码
简单的死锁代码
package com.course.concurrent.c1.s05_deadlock;
public class DeadLockSample {
private final static Object lock1 = new Object();
private final static String lock2 = new String();
public static void main(String[] args) throws Exception {
newThread("ThreadA", lock1, lock2).start();
newThread("ThreadB", lock2, lock1).start();
System.in.read();
}
private static Thread newThread(String threadName, Object lockFirst, Object lockSecond) {
return new Thread(() -> {
synchronized (lockFirst) {
System.out.println(Thread.currentThread().getName() + " holding lockFirst");
try {
Thread.sleep(3000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " waiting lockSecond");
synchronized (lockSecond) {
System.out.println(Thread.currentThread().getName() + " holding lockSecond");
}
}
}, threadName);
}
}
运行代码
通过jps找到pid
- 通过终端跳转到JDK的bin目录下
- 输入
jps
找到死锁进程的pid
通过jstack打印消息
执行jstack pid
,这里的死锁进程的pid是15212
会出现栈信息(进程状态之类的)。
向下会找到死锁的信息如下