public class ProdectData{
Object objA=new Object();
Object objB=new Object();
void methodA(){
String name=Thread.currentThread().getName();
synchronized(objA){
System.out.println(name+"拥有了objA,需要锁objB");
try{
Thread.sleep(1000*4);
}catch(InterruptedException e){}
synchronized (objB){
System.out.println(name+"执行完毕");
}
}
}
void methodB(){
String name =Thread.currentThread().getName();
synchronized (objB){
System.out.println(name+"拥有objB,需要锁objA");
try{
Thread.sleep(1000*3);
}catch(InterruptedException e){}
synchronized (objA){
System.out.println(name+"执行完毕");
}
}
}

void creatanstartthread(){
Runnable r=new Runnable(){
public void run(){
methodA();
}
};
Runnable rr=new Runnable(){
public void run(){
methodB();
}
};
Thread ta=new Thread(r,"线程ta");
Thread tb=new Thread(rr,"线程tb");
ta.start();
tb.start();
}
public static void main(String[] args){
new ProdectData().creatanstartthread();
}
}在这道例题中出现了死锁,但是该怎么解决????

解决方案 »

  1.   

    这个方法改下就可以呀 void methodB() {
    String name = Thread.currentThread().getName();
    synchronized (objA) {
    System.out.println(name + "拥有objB,需要锁objA");
    try {
    Thread.sleep(1000 * 3);
    } catch (InterruptedException e) {
    }
    synchronized (objB) {
    System.out.println(name + "执行完毕");
    }
    }
    }
      

  2.   

    这不就是与题意违背了嘛?
    题意是methodA()要先获得ObjA,在获得objB,而methodB要先获得ObjB,在获得ObjA的呀?
      

  3.   

    我上课听老师将操作系统时是要ObjA和ObjB同时获得!!该怎么做?