这个首先要理解锁的含义和wait是让谁等,notify把谁唤醒,你这个代码也不全,不知道你这个类是不是个线程类,算了给你个参考吧。http://blog.csdn.net/xm4014/article/details/14714

解决方案 »

  1.   

    你上面的程序执行流程应该是这样的:第一个线程执行到 wait后,就一直处于等待状态;第二个线程输出10,然后notifyAll并没有唤醒第一个线程,这是因为synchronized (this) 这里的this为线程实例对象本身,你上面两个不同的线程实例,所以this代表的不是一个实例,所以你这里无法起到同步效果。
      

  2.   

    synchronized (this) , this.wait()   this.notifyAll() ,这3个this要是同一个对象才能达到你的测试目的。
      

  3.   

    首先明白方法的意思:
    当一个线程执行wait()方法时,意味着此线程不再拥有它的锁,而且除了被唤醒,自己是醒不来的。
    当一个线程执行notifyAll()方法时,意味着当前线程上处于wait()状态的线程将被唤醒,题中的执行wait()方法的线程不是执行notifyAll()方法的线程的当前对象,所以执行wait()方法的线程并没有被唤醒。简单的讲:有wait()方法的线程只执行了一般就再没有执行,而有notifyAll()方法的线程执行完了,也就相当于程序执行完了,所以输出10程序就不执行了。
      

  4.   

    在Java多线程编程中,wait()的作用的是让当前线程进入阻塞状态,notify()是让当前线程唤醒继续执行。虽然是对线程状态的控制,但它们其实都是Object中的方法,这是因为wait与notify所起的作用与线程间的互斥锁有关。在执行wait()和notify()之前,必须要先获得互斥锁,即一定要和synchronized一起使用。wait()的含义是让出获得的互斥锁,并让自己进入阻塞状态。在notify()的时候也已经获得了互斥锁,所做的事情就是唤醒当前线程继续执行。假如synchronized的锁对象是obj的话,wait和notify正确的使用方法是obj.wait()和obj.notify()。如果使用this作为锁,则可以直接写成wait()和notify()。如果前后使用的锁对象不一致,会发生IllegalMonitorStateException。当有多个线程共同使用一个互斥锁时,notify()会随机选取一个执行过wait()的线程唤醒,其余会继续保持阻塞状态。如果想唤醒所有阻塞的进程,就使用到了notifyAll()。