public class DeadLockTest implements Runnable {
boolean flag = false;
static Object lock1 = new Object();
static Object lock2 = new Object();
@Override
public void run() {
System.out.println("flag=" + flag);
if (flag) {
synchronized (lock1) {
System.out.println("线程1获取锁1");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock2) {
System.out.println("线程1获取锁2");
}
}
} else {
synchronized (lock2) {
System.out.println("线程2获取锁2");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock1) {
System.out.println("线程2获取锁1");
}
}
}
}
public static void main(String[] args) {
DeadLockTest deadLockTest1 = new DeadLockTest();
deadLockTest1.flag = false;
DeadLockTest deadLockTest2 = new DeadLockTest();
deadLockTest2.flag = true;
new Thread(deadLockTest1).start();
new Thread(deadLockTest2).start();
}
}
控制台输出
flag=false
线程2获取锁2
flag=true
线程1获取锁1
线程1、线程2在获取自己编号锁的同时在锁内获取对方的锁导致死锁