+ 1
notify() wakes up only a random thread, while notifyAll() wakes up all waiting threads.
It really depends on how you program your running threads.
Imagine you have 3 threads: a, b and c. a is performing some task, and you call a.wait() in b and c. When a finishes you can call notifyAll(), so b and c start running next instruction after a.wait(), or notify(), this will wake up only b or only c. The other will wait until next time a calls notify() again.
* If a does not call notify() again, one of b or c will be waiting forever.
* If b wakes up and calls a.wait() again, it can be notified next time, so c won't. c may not be awaken ever.