notify()和notifyAll()的区别

javaglory 2006-08-18 03:00:25
如题, 请不要把JDK文档的内容照搬上来,谢谢。

...全文
1294 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jlusdy 2006-08-18
  • 打赏
  • 举报
回复
学习一下
wolf 2006-08-18
  • 打赏
  • 举报
回复
顶上去。
zuguanqun 2006-08-18
  • 打赏
  • 举报
回复
void notify(): 唤醒一个正在等待该对象的线程。
void notifyAll(): 唤醒所有正在等待该对象的线程。
javaglory 2006-08-18
  • 打赏
  • 举报
回复
软件新手:你的回答就从原理上讲了区别了,谢谢

  • 打赏
  • 举报
回复
楼主还是先看看这两个方法涉及到的概念再来问吧。。。 notify和notifyAll都是java多线程的部分,java提供了机制可以锁住对象(对象也是一种资源),当一个对象被一个线程访问时,这个对象能被锁住,这时其他要访问这个对象的线程就处于阻塞状态。但是如果线程调用了该对象的wait()方法,就会释放该对象的锁,并停止运行继续等待直到其他线程调用了这个对象的notify或notifyALL。但是,可能有好几个线程调用了该对象的wait同时等待,所以notify只是唤醒其中的一个(具体哪一个时由虚拟机的线程调度机制决定的)notifyAll唤醒所有线程。
bigc2000 2006-08-18
  • 打赏
  • 举报
回复
操作系统学过没?学过就知道 记录型信号量只唤醒队列中的第一个。
而信号量集的方式常常是唤醒所有

说简单点打点比方
假设2个队列 一个是某事件的阻塞队列,一个是就绪队列。

notify,就是把由于`该事件阻赛的队列第一个唤醒,而notifyAll,就是把所有阻塞的都唤醒,
唤醒,之后,是否能够到就绪队列,就要看具体的情况了(通常能够转移到就绪队列)

javaglory 2006-08-18
  • 打赏
  • 举报
回复
分数很少,但我实在是没分了,但还是请大家帮帮忙。
javaglory 2006-08-18
  • 打赏
  • 举报
回复
“正在等待该对象”是指什么对象呢?

一个有个All,一个没有,从英文语言上,或者从JDK文档上,谁都知道语文上的意思是什么,但问题是实际原理上是何区别呢?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧