为什么说"除非深思熟虑,尽量使用 notifyAll()"?
当做多线程同步时,等待-通知机制是我们比较常用的一种选择,而 Java 中,等待-通知机制有多种实现,我们接触最早也是最熟悉的,应该就是 Java 语言内置的 synchronized 配合 wait()、notify()、notifyAll() 这三个方法来实现。
如何利用 synchronized 实现等待-通知机制,我想大家都比较熟悉,就无需多说了。notify()
和 notifyAll()
都可以唤醒等待的线程,但是应该使用 notify()
还是 notifyAll()
就比较有争议了。
一种比较流行的说法就是,除非深思熟虑,否则尽量使用 notifyAll()。
我们今天就这个问题,来讨论一下这两个方法如何选择。
二. 等待-通知机制
2.1 什么是等待通知机制
在此之前,先来聊聊什么是等待-通知机制,以及它能解决什么问题?
在使用并发编程时,利用多线程来提高任务的执行效率,但是每个线程在执行时,都有一些先决条件需要被满足。例如生产者消费者模式下,消费者线程能够执行的先决条件,就是生产者产生了一个待消费的数据。
Read full article from 为什么说"除非深思熟虑,尽量使用 notifyAll()"?
No comments:
Post a Comment