简单的死锁为什么锁不住?
代码如下,死锁思路清晰明了,求教各位下面的死锁为什么会锁不住?
public class TestDeadLock {
public static void main(String[] args) {
new TestDeadLock().run();
}
public void run() {
Mythread mt = new Mythread();
Thread t1 = new Thread(mt, "t1");
Thread t2 = new Thread(mt, "t2");
t1.start();
t2.start();
}
class Mythread implements Runnable {
@Override
public void run() {
Object k1 = new Object();
Object k2 = new Object();
boolean flag = true;
if (flag) {
flag = false;
synchronized (k1) {
System.out.println(Thread.currentThread().getName() + ":k1");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (k2) {
System.out.println(Thread.currentThread().getName() + ":k2");
}
}
} else {
flag = true;
synchronized (k2) {
System.out.println(Thread.currentThread().getName() + ":k2");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (k1) {
System.out.println(Thread.currentThread().getName() + ":k1");
}
}
}
}
}
}
多次输入结果分别为:
t1:k1
t2:k1
t2:k2
t1:k2
t1:k1
t2:k1
t1:k2
t2:k2
t2:k1
t1:k1
t2:k2
t1:k2
t2:k1
t1:k1
t1:k2
t2:k2