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

 我来答
蓝风水晶灵
2016-05-22 · TA获得超过934个赞
知道小有建树答主
回答量:731
采纳率:0%
帮助的人:437万
展开全部
一般来说不需要直接用到,因为 jdk 已经有了很多并发 api。
可能需要注意的就是,线程的等待及唤醒可能不一定成功。

比如 wait 后,有可能会被意外唤醒,所以一般会有个 while 在外面,jdk 里有相应的说明,只要你看懂了应该就可以用对了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tonylinzhen
2016-04-22 · TA获得超过1368个赞
知道小有建树答主
回答量:997
采纳率:50%
帮助的人:398万
展开全部
  1. 都需要在使用前使用synchronized关键字

  2. 在逻辑业务上wait需要在notify之前执行

  3. 使用了wait的线程将阻塞并释放当前对象的锁,等待其他线程调用当前持有对象的notify方法

  4. 持有当前对象的线程执行了notify/notifyall,将唤醒之前调用wait的一个线程/全部线程

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
创作者bKPfCTTWJ4
2016-04-01
知道答主
回答量:33
采纳率:100%
帮助的人:3.7万
展开全部
我们可以利用wait()来让一个线程在某些条件下暂停运行。
notify 和 notifyAll 来通知那些等待中的线程重新开始运行。
不同之处在于,notify 仅仅通知一个线程,并且我们不知道哪个线程会收到通知,然而 notifyAll 会通知所有等待中的线程。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xsq2529562
2016-03-23 · 超过12用户采纳过TA的回答
知道答主
回答量:35
采纳率:0%
帮助的人:22.2万
展开全部
wait,线程等待,对线程进行阻塞,不调用notify或者notifyAll,线程会一直被挂起。
notify唤醒等待中的线程,notify唤醒所有等待中的线程。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
曾经只能回忆吗
2016-09-09
知道答主
回答量:15
采纳率:100%
帮助的人:7.1万
展开全部

我所知道有两点要注意的:

  1. 必须要在同步代码块或者同步函数中

  2. 必须由锁对象调用

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式