死锁的四个条件
package hxy.bytecode.thread;
public class DeadThead {
public static void main(String[] args) {
Object a = new Object();
Object b = new Object();
new Thread(() -> {
synchronized (a) {
System.out.println("I get a");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("I want to get b");
synchronized (b) {
System.out.println("I am a and get b");
}
}
}).start();
new Thread(() -> {
synchronized (b) {
System.out.println("I get b");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("I want to get a");
synchronized (a) {
System.out.println("I am b and get a");
}
}
}).start();
System.out.println("done");
}
}
效果如下
image.png
查看java进程
$ jps
image.png
查看死锁分析
$ jstack
image.png