如示例:
package com.fen.dou.springstu.app.event.inner;
import javax.servlet.ServletContextListener;
public class ApplicationStartingListenerTest {
private static Object lock1 = new Object();
private static Object lock2 = new Object();
public static void main(String[] args) {
new Thread(()->{
synchronized (lock1) {
try {
System.out.println("thread1 begin");
Thread.sleep(5000);
} catch (InterruptedException e) {
}
synchronized (lock2) {
System.out.println("thread1 end");
}
}
}).start();
new Thread(()->{
synchronized (lock2) {
try {
System.out.println("thread2 begin");
Thread.sleep(5000);
} catch (InterruptedException e) {
}
synchronized (lock1) {
System.out.println("thread2 end");
}
}
}).start();
}
}
jps找出进程号:
直接jstack+进程号打印出线程的堆栈信息,在末尾会有死锁的提示: