public class ThreadLock implements Runnable{ static Object o1 = new Object(); //对象o1
static Object o2 = new Object(); //对象o2
int flag = 1; //标记public void run (){ 
System.out.println("flag="+flag); 
//线程t1
if(flag == 1) 

synchronized(o1) 

try{ 
Thread.sleep(10000); }catch(InterruptedException e){e.printStackTrace();} 
System.out.println("t1.o1"); 

synchronized(o2) 

System.out.println("t1.o2"); 


//线程t2
if( flag ==  0) 

synchronized(o2) 

try{ 
Thread.sleep(10000); }catch(InterruptedException e){e.printStackTrace();} 
System.out.println("t2.o2"); } 
synchronized(o1) 

System.out.println("t2.o1"); 


} public static void main(String[] args) { 
ThreadLock tl = new ThreadLock(); 
ThreadLock ty = new ThreadLock(); 
tl.flag = 1; 
ty.flag = 0; 
Thread t1 = new Thread(tl); //t1先锁对象o1后再锁对象o2
Thread t2 = new Thread(ty); //t2先锁对象o2后再锁对象o1t1.start(); 
t2.start(); 

} 请问以上的代码为什么产生不了死锁

解决方案 »

  1.   

    public class TestDeadLock implements Runnable {
    public int flag = 1;
    static Object o1 = new Object(), o2 = new Object();
    public void run() {
    System.out.println("flag=" + flag);
    if(flag == 1) {
    synchronized(o1) {
    try {
    Thread.sleep(500);
    } catch (Exception e) {
    e.printStackTrace();
    }
    synchronized(o2) {
    System.out.println("1");
    }
    }
    }
    if(flag == 0) {
    synchronized(o2) {
    try {
    Thread.sleep(500);
    } catch (Exception e) {
    e.printStackTrace();
    }
    synchronized(o1) {
    System.out.println("0");
    }
    }
    }
    }

    public static void main(String[] args) {
    TestDeadLock td1 = new TestDeadLock();
    TestDeadLock td2 = new TestDeadLock();
    td1.flag = 1;
    td2.flag = 0;
    Thread t1 = new Thread(td1);
    Thread t2 = new Thread(td2);
    t1.start();
    t2.start();

    }
    }那为什么以上的代码就产生了死锁的现象?