A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zclove898 高级黑马   /  2011-12-19 17:14  /  3557 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zclove898 于 2011-12-19 17:27 编辑

在多线程中,notify和notifyAll的区别,在什么情况下使用

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 余松霖 于 2011-12-19 17:22 编辑

notify唤醒一个等待线程.这个线程是随机不能确定的.
notifyAll唤醒所有等待线程.
  一般有为了安全性,在多线程时,绝对多数时候应该使用notifiAll().防止死锁.

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
刘旭 黑马帝 2011-12-19 17:21:50
藤椅
notify是唤醒线程池中排在队列前面的线程,notifyAll唤醒所有等待线程

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
余松霖 发表于 2011-12-19 17:16
notify唤醒一个等待线程.这个线程是随机不能确定的.
notifyAll唤醒所有等待线程.
  一般有为了安全性,在多 ...

哦,有点感觉了,谢谢了
回复 使用道具 举报
t_mac 黑马帝 2011-12-19 17:25:43
报纸
本帖最后由 t_mac 于 2011-12-19 17:27 编辑

notify唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。直到当前的线程放弃此对象上的锁定,才能继续执行被唤醒的线程。
notifyAll则是唤醒所有等待的线程,但是只有获得锁的那个线程才有执行的机会。
为什么要用notifAll呢?因为只用notify,容易出现只唤醒本方线程的情况。导致程序中的所有线程都等待,也就是通常说的“死锁”。
JDK1.5 中提供了多线程升级解决方案。
将同步Synchronized替换成现实Lock操作。
将Object中的wait,notify notifyAll,替换了Condition对象。
LZ可以去了解一下,现在一般都用这个。

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
刘旭 发表于 2011-12-19 17:21
notify是唤醒线程池中排在队列前面的线程,notifyAll唤醒所有等待线程

谢谢了!!!!!
回复 使用道具 举报
t_mac 发表于 2011-12-19 17:25
notify唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。直 ...

恩好的,谢谢了
回复 使用道具 举报
        notify和notifyAll都是把某个对象上休息区内的线程
唤醒,notify只能唤醒一个,但究竟是哪一个不能确定,而notifyAll
则唤醒这个对象上的休息室中所有的线程.一般有为了安全
性,我们在绝对多数时候应该使用notifiAll(),除非你明确知道
只唤醒其中的一个线程.

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马