如题

解决方案 »

  1.   

    答:问得好。这个很重要。这是由于其它线程(与你的wait()完全无关的其它线程)会调用notifyAll(),而这个线程并不是你的wait()所共同协作的那个线程。因此,每一次被唤醒,你都要检查一次你wait()等待的条件。因而要用while。
      

  2.   

    因为要循环!当然用while不用if了
      

  3.   

    因为要等待notifyAll(),把线程唤醒,所以要while一直等待着啊,所以不能用if
      

  4.   

    因为wait()方法,会把对象锁贡献出去,而自己处于等待状态,当拥有对象锁的对象调用notify() 或者notifyAll()
    的时候,当前的线程并没有把锁还给其他线程,直到当前线程synchronized方法执行完毕,在对象监听器上等待的线程才有
    执行的机会。
      

  5.   


    if(条件不满足){
    this.wait();

    ....其他语句当其他线程notify()或者notifyAll()的时候,你继续执行其他的语句
    这个时候,也许你的条件依然不满足,所以得这样:while(条件不满足){
    this.wait();
    }
    .....其他语句
      

  6.   


    if(条件不满足){
    this.wait();

    ....其他语句当其他线程notify()或者notifyAll()的时候,你继续执行其他的语句
    这个时候,也许你的条件依然不满足,所以得这样:while(条件不满足){
    this.wait();
    }
    .....其他语句
      

  7.   

    要等待notifyAll(),把线程唤醒,所以要while一直等待着啊,所以不能用if