不出现异常和错误,程序却不执行。
如下可能出现死锁。
class Mythread1 extends Thread {
Object o1;
Object o2;
public Mythread1(Object o1,Object o2) {
this.o1=o1;this.o2=o2;
}
public void run() {
synchronized(o1){
synchronized(o2){
}
}
}
}
class Mythread2 extends Thread {
Object o1;
Object o2;
public Mythread2(Object o1,Object o2) {
this.o1=o1;this.o2=o2;
}
public void run() {
synchronized(o2){
synchronized(o1){
}
}
}
}
若创建一个Mythread1的对象t1和一个Mythread2的对象t2,再使o1和o2相同,那么两个线程同时执行时就可能出现死锁。因为若t1用了o1的对象锁,t2用了o2的对象锁,那它们两个都无法拿到接下来的对象锁,出现死锁。