简单程序模拟死锁
public class DeadLock implements Runnable{
public boolean flag;
static Object lockOne = new Object();
static Object lockTwo = new Object();
@Override
public void run() {
//flag为true时会先锁定lockOne,然后锁定lockTwo;flag为false时则正好相反。
//这样在两个线程持有不同的flag进来时就会造成死锁
System.out.println(flag);
if(flag) {
synchronized(lockOne){
try {
//保证另一个线程启动拿到lockTwo的锁
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized(lockTwo){
System.out.println("lock one two");
}
}
} else {
synchronized(lockTwo){
try {
//保证另一个线程启动拿到lockOne的锁
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized(lockOne){
System.out.println("lock one two");
}
}
}
}
public static void main(String...args){
DeadLock lock1 = new DeadLock();
DeadLock lock2 = new DeadLock();
lock1.flag = true;
lock2.flag = false;
new Thread(lock1).start();
new Thread(lock2).start();
}
}