public class DeadLockExampleTwo {
public static void main(String[] args) {
final DeadLockExampleTwo d = new DeadLockExampleTwo();
final DeadLockExampleTwo d1 = new DeadLockExampleTwo();
new Thread(new Runnable(){
@Override
public void run() {
d.doSomething(d1);
}
}).start();
new Thread(new Runnable(){
@Override
public void run() {
d1.doSomething(d);
}
}).start();
}
public synchronized void doSomething(DeadLockExampleTwo e) {
System.out.println("Doing "+Thread.currentThread().getName());
e.done(this);
}
public synchronized void done(DeadLockExampleTwo d) {
System.out.println("Done");
}
}
上面的代码有可能导致死锁。来自第一个线程的 d 锁定 doSomething 方法,来自其他线程的 d1 获得相同方法的锁定。当两个对象都锁定该方法时,究竟会发生什么?他们如何阻止对方执行“完成”方法?