1.首先先编写一个死锁的程序
public class Locktest extends Thread {
Object o1;
Object o2;
boolean flag;
Locktest(Object o1, Object o2, boolean flag) {
this.o1 = o1;
this.o2 = o2;
this.flag = flag;
}
public void run() {
while(true)
if(flag) {
while(true)
synchronized (o1) {
System.out.println("Flag is true,get the lock o1");
synchronized(o2) {
System.out.println("Flag is true,get the lock o2");
}
}
} else {
while(true)
synchronized (o2) {
System.out.println("Flag is false,get the lock o2");
synchronized(o1) {
System.out.println("Flag is false,get the lock o1");
}
}
}
}
public static void main(String[] atgs) {
Object o1 = new Object();
Object o2 = new Object();
Locktest test1 = new Locktest(o1, o2, true);
Locktest test2 = new Locktest(o1, o2, false);
test1.start();
test2.start();
}
}
2.运行程序得到了一下得输出,可以发现程序不再运行发生了死锁
3.在Linux终端上输入jps命令查看目标进程的PID是43400
4.通过jstack -l 43400命令查看进程的堆栈信信息,这时发现出现了死锁
可以看到线程0,1分别持有了对方等待的锁,形成了死锁