日期:2014-05-20 浏览次数:21090 次
public class DeadLock implements Runnable{
public static void main(String[] args) throws Exception{
new DeadLock();
}
A a=new A();
B b=new B();
public DeadLock() throws Exception{
Thread.currentThread().setName("MainThread");
new Thread(this).start();//a new Thread
// Thread.sleep(1000);
a.foo(b); //MainThread Thread
System.out.println("back to main hread"); //never executed
}
public void run(){
Thread.currentThread().setName("OtherThread");
b.bar(a);
System.out.println("back to other thread");
}
}
class A{
String name; //问题在这,我知道该句应该在foo()里面,为什么下面打印的name都是main?
synchronized void foo(B b){
name =Thread.currentThread().getName(); //每次调用的时候获取当前线程
System.out.println(name+" enter A.foo()");
try{
Thread.sleep(100);
}
catch(InterruptedException e){
System.out.println(e.getMessage());
}
System.out.println(name+" trying to call A.last()");
b.last();
}
synchronized void last(){
System.out.println("inside A.last()");
}
}
class B{
// String name=Thread.currentThread().getName();//问题在这,我知道该句应该在foo()里面,为什么下面打印的name都是main?
String name;
synchronized void bar(A a){
name =Thread.currentThread().getName();
System.out.println(name+" enter B.bar()");
try{
Thread.sleep(100);
}
catch(InterruptedException e){
System.out.println(e.getMessage());
}
System.out.println(name+" trying to call B.last()");
a.last();
}
synchronized void last(){
System.out.println("inside B.last()");
}
}