notifyAll是唤醒在此对象监视器上等待的所有线程。线程通过调用其中一个 wait 方法,在对象的监视器上等待。
直到当前线程放弃此对象上的锁定,才能继续执行被唤醒的线程。被唤醒的线程将以常规方式与在该对象上主动同步的其他所有线程进行竞争;例如,唤醒的线程在作为锁定此对象的下一个线程方面没有可靠的特权或劣势。 这个就是Object中的一个唤醒方法,而且notifyAll必须前提是在监视器上,所以在Synchronized这个监视器里面才会运行。
如果有多个线程,只用notify唤醒的话会导致多个线程全部等待在哪,全都放弃执行资格。原因你可以重新听一遍视频里毕老师加完while后再加notifyAll那一段(细说确实很麻烦)。就是说只要一个线程进去之后执行完就唤醒所有在这个监视器上等待的线程,避免线程发生类似于死锁的情况,无法继续运行。
|