------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
public class Suo {
public static voidmain(String[] args) {
Thread t1 = new Thread(newTest(true));
Thread t2 = new Thread(newTest(false));
t1.start();
t2.start();
}
}
class Test implements Runnable {
private boolean flag;
public Test(boolean flag) {
this.flag = flag;
}
public void run() {
if(flag){
synchronized(Lock.lock1){
System.out.println("if....lock1");
synchronized(Lock.lock2){
System.out.println("if.....lock2");
}
}
}
else{
synchronized(Lock.lock2){
System.out.println("else....lock2");
synchronized(Lock.lock1){
System.out.println("else.....lock1");
}
}
}
}
}
class Lock {
static Object lock1 = newObject();
static Object lock2 = newObject();
}
线程0线执行,lock1允许进入时,此时打印if lock1。打印完后,线程0拿着lock1的锁想进入lock2中,当然进不去,线程0停止。执行线程1,lock2允许进入,此时打印 else lock2。打印完后,线程1拿着lock2的锁想进去到lock1中,当然也进不去,此时线程1停止。因此构成了死锁。
若线程1先执行是同样的道理。