java中的notify和notifyall具体在哪些场景下使用哪一个比较好?
2014-07-10 来自:传说中的田小Q 1 人回应

在多线程编程中,我们需要对利用同步原语对多线程中的race condition进行同步。其中等待原语中的条件变量(condition variable)顾名思义就是一个或多个线程等待某个布尔表达式为真,即等待别的线程“唤醒”它。具体而言,java object内置的wait()、notify()、notifyall()是条件变量。

notify()和notifyall()具体的区别即前者为唤醒某一个等待线程让它继续运行,而notifyall()则使得所有等待线程退出wait状态并再次竞争某个锁。看似notify()和notifyall()在很多场景下可以互换,其实我觉得应该不然。这里想问的是,notify和notifyall分别有哪些优点和缺点,分别使用与哪些具体的场景?

2014-07-10 来自:人鱼鱼鱼鱼鱼鱼

如果某个事情导致你需要多个等待线程都去处理,那么 notifyAll(),如果某事情导致只需要一个线程处理,那么就 notify()。
还是用餐厅做菜和端盘子的来表达,如果厨师一次只做出来一个菜,并且马上在窗口放一盘菜,然后按铃( notify)通知 一个服务员就可以了。如果厨师做好了菜都先放到自己的灶台上,然后一下子端了很多盘菜到窗口,那么就需要使劲按铃(notifyAll),让所有的服务员都过来看看能不能碰碰运气拿到一盘菜。

您的回应

你还未登陆,不能回应!登陆