java中的notify和notifyAll有甚么不同
在Java中,notify
和notifyAll
是用于线程间通讯的方法,用于唤醒等待中的线程。
不同以下:
notify
方法只会唤醒一个等待中的线程,而notifyAll
方法会唤醒所有等待中的线程。wait
方法,当调用notify
方法时,只会唤醒其中一个线程,具体唤醒哪一个线程是不肯定的,而调用notifyAll
方法时,会唤醒所有等待中的线程。notify
方法唤醒的线程是由系统随机选择的,可能会致使某些线程长时间等待而没有被唤醒,从而造成"线程饥饿"的问题。而使用notifyAll
方法可以免这个问题。notify
方法通经常使用于多个线程并发操作共享资源的情况下,当某个线程完成对共享资源的修改时,通过调用notify
方法唤醒其他等待中的线程来处理这个资源。而notifyAll
方法通经常使用于多个线程竞争某个资源的情况下,当某个线程释放了资源时,通过调用notifyAll
方法唤醒其他等待中的线程来竞争这个资源。综上所述,notify
方法唤醒一个等待中的线程,而notifyAll
方法唤醒所有等待中的线程,使用时需要根据具体情况选择使用。
TOP