notifyAll():

在上两次中对于Object的wait()和notify()方法的官方doc进行了通读,上一次https://www.cnblogs.com/webor2006/p/11407966.html读了notify()的说明,接下来再来读一下notifyAll()方法的说明,先看下它的声明,也是native的:

开始逐字解读:

从上面描述可以看到,其实它跟notify()方法的作用是差不多的,只是该方法是唤醒所有的线程,但是注意:唤醒的线程是不会立马执行的,需要跟普通的其它线程进行相等的锁竞争才行,竞争到了才能继续执行。

wait()&notify()&notifyAll()总结:

  • 当调用wait()时,首先需要确保调用了wait()方法的线程已经持有了对象的锁。
  • 当调用wait()后,该线程就会释放掉这个对象的锁,然后进入到等待状态(wait set)。
  • 当线程调用了wait()后进入到等待状态时,它就可以等待其它线程调用相同对象的notify和notifyAll方法来使得自己被唤醒。
  • 一旦这个线程被其它线程唤醒后,该线程就会与其它线程一同开始竞争这个对象的锁(公平竞争),只有当该线程获取到了这个对象的锁后,线程才会继续往下执行。
  • 调用wait()方法的代码片段需要放在一个synchronized或或者是synchronized方法中,这样才可以确保线程在调用wait()方法前已经获取到了对象的锁。
  • 当调用对象的notify()方法时,它会随机唤醒该对象等待集合(wait set)中的任意一个线程,当某个线程被唤醒后,它就会与其它线程一同竞争对象的锁。
  • 当调用对象的notifyAll()方法时,它会唤醒该对象等待集合(wait set)中的所有线程,这些线程被唤醒后,又会开始竞争对象的锁。
  • 在某一时刻,只有唯一一个线程可以拥有对象的锁。

最新文章

  1. php ob_flush 和flush
  2. CSS z-index 属性的使用方法和层级树的概念
  3. 解决微信浏览器无法使用window.location.reload()刷新页面
  4. [ThingWorx] Install Guideline
  5. Java replace() 方法
  6. HDU 2034 人见人爱A-B 分类: ACM 2015-06-23 23:42 9人阅读 评论(0) 收藏
  7. ucenter同步登陆机制
  8. 【转载】DataGridView 使用集合作为数据源,并同步更新
  9. 构造SEH来实现跳转-转载
  10. HDU5126---stars (CDQ套CDQ套 树状数组)
  11. javascript对URL中的参数进行简单加密处理
  12. 您在基于 Windows 7 的或基于 Windows Server 2008 R2 的计算机上读取器中插入智能卡时出现错误消息:"设备驱动程序软件未能成功安装"
  13. Appium 服务命令行参数
  14. [转载] redis-cluster研究和使用
  15. Android使用shape制作圆形控件及添加弹跳动画
  16. FileReader读取本地文件
  17. Java z 404
  18. 洛谷P1144最短路计数题解
  19. BZOJ5291/洛谷P4458/LOJ#2512 [Bjoi2018]链上二次求和 线段树
  20. POJ 3469.Dual Core CPU 最大流dinic算法模板

热门文章

  1. Java之Java程序的基本结构
  2. Word2016经常复制公式卡死无响应如何解决?
  3. Springboot采用hibernate-validate验证请求参数
  4. python大数据挖掘和分析的套路
  5. kubernetes 实践四:Pod详解
  6. 为了防止页面重新自动加载,可以给a标签设置href="javascript:void(0);"
  7. [洛谷P4052][JSOI2007]文本生成器
  8. shell 学习笔记9-while/until循环语句
  9. java之hibernate之基于主键的双向一对一关联映射
  10. 你有自信写while(true)吗?