(1),
public class TestCls {
private static Object lock1 = new Object();
private static Object lock2 = new Object();
public static void main(String[] args) throws Exception {
Thread th1 = new Thread(
new Runnable() {
@Override
public void run() {
synchronized (lock1 ) {
System.out.println("线程1锁住了成员静态变量lock1,阻塞线程3秒");
try {
Thread.sleep(3000);
} catch (Exception ex1) {
ex1.printStackTrace();
}
synchronized (lock2) {
System.out.println("线程1锁住了成员静态变量lock2");
}
}
}
}, "线程1"
);
th1.start();
Thread th2 = new Thread(
new Runnable() {
@Override
public void run() {
try {
synchronized (lock2){
System.out.println("线程2锁住了lock2,阻塞当前线程3秒");
Thread.sleep(3000);
synchronized (lock1) {
System.out.println("线程2锁住了lock1");
}
}
} catch (Exception ex1){
ex1.printStackTrace();
}
}
}, "线程2"
);
th2.start();
}
}
(2),在cmd命令窗口
在cmd 中 jps -l 主类全名,进程号
jstack -l 进程号, 线程快照
如下
Found one java - level deadLock
线程2 waitting to lock monitor 0x00000583 (object 0x0000
线程1 waitting to lock monitor 0x00000583 (object 0x0000