ちょっと聞いていい?

以下のコードでnotifyAllされたらどうなるのって質問

void A()
  synchronized(Lock){
    if(List.size() == 0){
      try{ Lock.wait(); }(Exception e){}
    }
    //以下処理続く
  }
}

このコードで複数のスレッドが待ち状態だったらnotifyAllとき再度Lockを取りに行ってくれるの?
もし、そうだったとしたら。
結局はnotifyで1つのスレッドのみ動かすってのと同じことになるの?

それとも再起処理的に以下のようにしなきゃだめ?
void A()
  synchronized(Lock){
    if(List.size() == 0){
      try{ Lock.wait(); }(Exception e){}
      A(); ←ここでさらに再帰的に同じメソッドを呼び出す
    }
    //以下処理続く
  }
}

おしえてエロイひと。。。