【每日一题】Java 多线程中notify和notifyall的区别是?

Posted by 石福鹏 on 2020-10-14

notify

notify唤醒在此对象监视器上等待的单个线程。

如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。选择是任意性的,并在对实现做出决定时发生。线程通过调用其中一个 wait 方法,在对象的监视器上等待。 直到当前线程放弃此对象上的锁定,才能继续执行被唤醒的线程。被唤醒的线程将以常规方式与在该对象上主动同步的其他所有线程进行竞争;

例如,唤醒的线程在作为锁定此对象的下一个线程方面没有可靠的特权或劣势。

notifyall

notifyall唤醒在此对象监视器上等待的所有线程。

线程通过调用其中一个 wait 方法,在对象的监视器上等待。 直到当前线程放弃此对象上的锁定,才能继续执行被唤醒的线程。被唤醒的线程将以常规方式与在该对象上主动同步的其他所有线程进行竞争;

例如,唤醒的线程在作为锁定此对象的下一个线程方面没有可靠的特权或劣势。