I understand the essence of his question. I ask myself this question about once every 6 months... But her answer is complete. Usually notify all is not what you want. If your threads are waiting on the same lock, the notify all will waste time since only 1 thread can get through anyway. However, if your threads are simply waiting for some other reason, then notify all will get them all going.
notify should be used only when you are sure that only one thread is waiting on an object's monitor. If there are more use notifyAll. Using notfyAll has the risk of excessive context switching when only one of the dormant threads is able to proceed. In order to alleviate this, use more than one monitor to wait on; specially to avoid several threads waiting for different conditions on the same monitor.