/**
* 死锁,两个线程都在等待对方释放锁所处于的"僵持"状态
* @author Administrator
*
*/
public class DeathLockDemo {
private Object k1 = new Object();
private Object k2 = new Object();
public void a(){
/*
* t1先调用的a方法,所以会将k1加锁
* 然而t2线程在调用b方法的最后要调用a方法。
* 所以t2线程会在这里进入阻塞,等待t1将k1的
* 锁释放,但是由于t2线程先执行了b方法,所以会
* 将k2加锁,直到这里将a方法执行完毕才会释放
* k2锁。
*/
synchronized (k1) {
Thread t = Thread.currentThread();
System.out.println(t+"正在调用a方法");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
}
b();//t1线程只有执行完b方法后才会释放k1
}
}
public void b(){
synchronized (k2) {
Thread t = Thread.currentThread();
System.out.println(t+"正在调用b方法");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
}
a();
}
}
public static void main(String[] args) {
final DeathLockDemo dld = new DeathLockDemo();
Thread t1 = new Thread(){
public void run(){
dld.a();
System.out.println(getName()+"执行完毕了!");
}
};
Thread t2 = new Thread(){
public void run(){
dld.b();
System.out.println(getName()+"执行完毕了!");
}
};
t1.start();
t2.start();
}
}
运行结果:
Thread[Thread-0,5,main]正在调用a方法
Thread[Thread-1,5,main]正在调用b方法