实现通知比较流行保守的方法是优先使用notifyAll()保障正确性
Object.notify()可能导致信号丢失的正确性问题,Object.notifyAll()虽然效率不高(把不需要唤醒的等待线程给唤醒),但是保证正确性方面有保障。
只有在以下两个条件都满足的情况下使用notify()代替notifyAll()
- 一次通知仅需要唤醒至多一个线程
- 相应对象上的所有等待线程都是同质等待线程(同质等待线程:指线程使用同一个保护条件,并且这些线程在Objec.wait()调用返回之后的处理逻辑一致)