如何在 Java 中正确使用 wait,notify 和 notifyAll

 我来答
猿味儿
2016-08-04 · 超过15用户采纳过TA的回答
知道答主
回答量:30
采纳率:0%
帮助的人:11.2万
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
浮生落紫尘
2016-05-11 · 从事大型企业管理系统开发
浮生落紫尘
采纳数:78 获赞数:81

向TA提问 私信TA
展开全部
wait和notify,多线程之间需要协调工作。
例如,浏览器的一个显示图片的 displayThread想要执行显示图片的任务,必须等待下载线程downloadThread将该图片下载完毕。如果图片还没有下载完,displayThread可以暂停,当downloadThread完成了任务后,再通知displayThread“图片准备完毕,可以显示了”,这时,displayThread继续执行。
以上逻辑简单的说就是:如果条件不满足,则等待。当条件满足时,等待该条件的线程将被唤醒。在Java中,这个机制的实现依赖于wait/notify。等待机制与锁机制是密切关联的。每个对象都有wait(),notify(),notifyAll()。因为每个对象都有锁,锁是每个对象的基础。
wait方法会使当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法,或被其他线程中断。wait方法与notify方法必须在同步块内执行,即synchronized(obj)之内。再者synchronized代码块内没有锁是寸步不行的,所以线程要继续执行必须获得锁,相辅相成。
notify唤醒在此对象等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程(随机)。直到当前的线程放弃此对象上的锁,才能继续执行被唤醒的线程。同wait方法一样,notify只能由持有对像锁的线程来调用。notifyall也一样,不同的是notifyall会唤配所有在此对象锁上等待的线程。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式