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();
}
}在这道例题中出现了死锁,但是该怎么解决????
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();
}
}在这道例题中出现了死锁,但是该怎么解决????
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 + "执行完毕");
}
}
}
题意是methodA()要先获得ObjA,在获得objB,而methodB要先获得ObjB,在获得ObjA的呀?