标题说不清楚看代码:一个死锁的程序 数字位程序的执行过程。我想问的是为什么run()方法不在第3步后直接执行,而是要在a.foo(b)之后执行呢?
package com.yanghaolin.deadLock;class A 
{
synchronized void foo(B b){ //5
String name = Thread.currentThread().getName();//6
System.out.println(name + " entered A.foo");//7
try{
Thread.sleep(1000);//8
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(name + " trying to call B.last()");//15
b.last();//16
} synchronized void last(){ //20
System.out.println("inside A.last");
}
}class B
{
synchronized void bar(A a){ //11
String name = Thread.currentThread().getName();12
System.out.println(name + " entered B.bar");//13
try{
Thread.sleep(1000);//14
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(name + " trying to call A.last()");//18
a.last();//19
} synchronized void last(){ //17
System.out.println("inside B.last");
}
}public class DeadLock implements Runnable
{
A a = new A();
B b = new B();
public DeadLock(){
Thread.currentThread().setName("MainThread");//2
new Thread(this).start();//3
a.foo(b);//4
System.out.println("back in main thread");
} public void run(){
Thread.currentThread().setName("RacingThread");//9
b.bar(a);//10
System.out.println("back in other thread");
} public static void main(String[] args){
new DeadLock();//1
}
}