JUC--wait和notify
问题:wait()和notify()有什么作用?
–解答:这两个方法都是Object中提供的方法,用于线程间的协作交互。wait方法能够将当前占有锁的线程进入等待状态,notify则可以唤醒等待队列中的一个线程
问题:wait()和sleep()有什么区别?
–解答:这两个方法都能够使当前运行的线程进入等待状态(Time_waiting)。不同的是,1. 前者是Object中提供的对象且只有在获取到了锁对象(进入了synchronized代码块)的线程才能使用。而sleep是Thread的静态方法,在任何时候都能够调用该方法;2. 在synchronized代码块中,调用wait方法后线程会释放锁并进入等待状态,而调用sleep方法线程只会进入等待状态不会释放锁。在并发编程中建议使用wait方法,而不要使用sleep方法让线程进入等待状态。
问题:什么是虚假唤醒?如何解决?
–解答:虚假唤醒是指当等待队列中有多个线程处于等待状态时,如果使用notify方法想要唤醒某个线程,可能唤醒的并不是预期线程的情况。可以使用notifayAll方法替代notify方法,该方法会唤醒等待队列中的所有线程,其中只有一个线程等待的条件发生改变,能够继续执行,这样可以避免虚假唤醒。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 dch'blog!