我帮你改了下程序
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);
// while(true)
if(flag == 1) {
synchronized(o1) {
try {
System.out.println("我是线程0---我拿到了01 锁");
Thread.sleep(300); // 这里的代码和下面的else ,sleep注释之后就难形成死锁,你可以测试下。也可是加个while(true)增加死锁
// 形成可能性。
} catch(Exception e) {
e.printStackTrace();
}
synchronized(o2) {// 把代码写成嵌套的形式。
System.out.println("我是线程"+Thread.currentThread().getName()+"我到了,,,");
}
}
} else {
synchronized(o2) {
try {
System.out.println("我是线程1---我拿到了02 锁");
Thread.sleep(300);
} catch(Exception e) {
e.printStackTrace();
}
synchronized(o1) {
System.out.println("我是线程"+Thread.currentThread().getName()+"我到达了终点");
}
}
}
}
public static void main(String[] args) {
TestDeadLock td1 = new TestDeadLock();
TestDeadLock td2 = new TestDeadLock();
td1.flag = 1;
td2.flag = 0;
new Thread(td1).start();
new Thread(td2).start();
}
}
//形成死锁关键是线程拿到锁。对方拿不到锁互相等待。
//希望对你有帮助。
|