public class Test extends Thread{ public Test() {
System.out.println("start...");
}

public void run() {
System.out.println("waiting...");
        synchronized(this) {
    try {
                wait();
    } catch(Exception ex) {
    System.out.println(ex);
    }
        }
System.out.println("notify");
} public static void main(String[] args) {
Test t = new Test();
t.start();
try {
Thread.sleep(2000);
} catch(InterruptedException ex) {
System.out.println(ex);
}
System.out.println("notifying...");
        synchronized(t) {
    t.notify();
        }
}
}

解决方案 »

  1.   

    wait和notify都得事先拥有这个对象的锁,所以必须synchronized
    改成上面的样子就可以了
      

  2.   

    synchronized是不是很消耗资源的啊?
    如果在没个线程里都用上,如果线程很多怎么办,比如上千个?
      

  3.   

    当然synchronized是要更耗资源
    不过跟线程的数量没关系。
    多看书。仔细看api。
      

  4.   

    哦,谢谢了,还有个问题,我看了书上的不懂。
    join()这个方法到底是什么意思,书上说是使调用线程等待另一线程完成,我不太理解啊。