wait() and notify()

有一段程序:
public class WaitAndNotify extends Thread{
public synchronized void run(){
try{
wait();
}catch(InterruptedException e){
e.printStackTrace(System.err);
}
}

public static void main(String[] args){
WaitAndNotify wan=new WaitAndNotify();
wan.start();
synchronized(wan){ //1
wan.notify(); //1
} //1
}
}

按照我的想法程序应该按下面的顺序运行:
1 开始新的线程(wan.start())
2 线程在run()方法中被阻塞
3 因为是调用的wait()阻塞线程,所以wan对象上的锁应当被放弃,从而使//1的代码被执行,线程被唤醒,程序得以继续执行

可实际情况是:
wan.start()被调用,线程被阻塞,没有继续向下执行。不知道是什么原因?
小弟初学, 还请多多关照

你对wait() and notify() 机制有一定误解。
wait() 和notify一般需要在同一个synchronized 点。

在wan.start()呼叫之后,会有两个线程同时运行:main线程和wan代表的线程。但问题是,接下来哪个线程会被调度执行呢?You never know!
如果是wan代表的线程先执行,结果就是你所希望的。
但如果是main线程首先执行,wan线程就会永远在wait方法中等待。