同步块中调用了wait()会自动的释放该共享资源的锁,然后从运行状态中退出进入等待队列,直到再次被唤醒。

先来了解notify()的作用
该方法可以随机的唤醒等待队列中等待同一个共享资源一个线程,并且使得该线程退出等待状态进入可运行状态。

notifyAll()
可以使得所有在等待队列中等待同一个共享资源的全部线程从等待队列进入可执行状态,此时优先级较高的那个线程最先执行,也可能随机执行。

这里的共享资源指的是synchronized(object)中,所有对object锁争夺的线程

区别:

notify只是唤醒随机一个线程,让它从阻塞进入Runnable。在生产者-消费者模式中,使用这个方法可能造成“假死”的现象,因为如果各自都是唤醒同类线程(生产者唤醒生产者)也就是所有的线程都处于wait()状态,程序无法继续执行。
而notifyAll者会唤醒所有对同一个对象锁争夺的并且正在阻塞队列中的线程,包括同类也异类,让他们进入Runnable状态。这样可以避免假死,所以效率会比condition低,也没有那么灵活。

注意:RUnnable也是需要等待的,只是它等待是cpu的时间片,它也是需要排队的。进入Runnable中的状态只要系统不出异常或者前面的线程不是死循环则一定会执行,只是时间问题。

notify()和notifyAll()区别相关推荐

  1. notify和notifyAll区别

    notify()和notifyAll()都是Object对象用于通知处在等待该对象的线程的方法.两者的最大区别在于: notifyAll使所有原来在该对象上等待被notify的线程统统退出wait的状 ...

  2. Java之notify和notifyAll区别

    在Java中notify()和notifyAll()方法都是Object对象用于通知处在等待该对象的线程的方法. 两者的最大区别在于: notifyAll方法 使所有原来在该对象上等待被notify的 ...

  3. wait, notify 和 notifyAll区别

    今天正好碰到这个问题,也疑惑了好久.看了一圈知乎上的答案,感觉没说到根上.所以自己又好好Google了一下,终于找到了让自己信服的解释. 先说两个概念:锁池和等待池 锁池:假设线程A已经拥有了某个对象 ...

  4. notify() 和notifyAll()区别

    引用网上的例子,在明知到生产者 一个生产者,几个抢食者,如果通知所有的抢食者执行的操作会发生异常的时候,使用notify import java.util.ArrayList; import java ...

  5. notify()和 notifyAll()区别

    1.调用notifyAll()会唤醒所有的线程:调用notify()唤醒一个线程. 2.调用notifyAll() 会将全部线程由等待池移到锁池,然后参与锁的竞争,竞争成功则继续执行:如果不成功,则留 ...

  6. 用实例揭示notify()和notifyAll()的本质区别

    用实例揭示notify()和notifyAll()的本质区别 收藏 notify()和notifyAll()都是Object对象用于通知处在等待该对象的线程的方法.两者的最大区别在于: notifyA ...

  7. Java并发编程—notify和notifyAll有什么区别?

    原文作者:知乎用户 原文地址:https://www.zhihu.com/question/37601861/answer/145545371 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  8. Java-线程中sleep()、wait()和notify()和notifyAll()、suspend和resume()、yield()、join()、interrupt()的用法和区别

    Java线程中sleep().wait()和notify()和notifyAll().suspend和resume().yield().join().interrupt()的用法和区别 从操作系统的角 ...

  9. Java中notify和notifyAll的区别 - 何时以及如何使用

    Java  notify   vs notifyAll notify和notifyAll方法之间有什么区别是棘手的Java问题之一! Condition 是个什么玩意? 提几个问题,从问题中去了解去学 ...

最新文章

  1. 组件化实践详解(二)
  2. Chillingo分享三款游戏图标的设计经验
  3. 注意指针修饰符的准确含义
  4. 这几部高分学科纪录片,助力孩子涨姿势拓视野~
  5. 混合多云架构_使用混合多云每个人都应避免的3个陷阱(第3部分)
  6. Win32ASM学习[5]: 数据对齐相关的伪指令(ALIGN、EVEN、ORG)
  7. python词云_python词云
  8. mysql sqlite 性能优化_MySQL和Sqlite3性能测试
  9. 图论算法(四)--最小生成树的Kruskal [ 加边 ] 、Prim [ 加点 ] 的解法(JAVA)
  10. 【JAVA 第四章 流程控制语句】课后习题 判断两个圆是否相交 圆和直线的位置关系
  11. 项目Beta冲刺(团队7/7)
  12. 高等微積分(高木貞治) 1.4節 例2
  13. BatchNormalization 优点
  14. NLP特征工程(待完善细节)
  15. 毕向东_JavaScript视频教程_JavaScript回顾
  16. Python3程序设计编程题解
  17. 计算机 人脑 发热 ppt,人脑即电脑,疯狂的大脑进化史,大脑科学的革命
  18. html5绘制变换图形-旋转图形
  19. Android_应用程序权限
  20. 装虚拟机装Oracle数据库

热门文章

  1. Angular.js ng-dblclick ng-click
  2. 量化投资界领头羊-明汯投资
  3. vue+elementui实现联想购物商城,样式美观大方
  4. 《我的输入法更换轨迹》
  5. pads 输出钢网层 如何过虑测试点
  6. 赵小楼《天道》《遥远的救世主》解读(2)属于肖亚文和芮小丹的沟通方式
  7. pandas中drop用法_pandas用法总结
  8. MySQL源码详解二 初始化performance_schema
  9. 自动备份Mysql数据库bash脚本
  10. ckc交易什么意思_31伦敦金交易开户,股票601398,股票三条线是什么意思