wait:表示持有对象锁的线程A准备释放对象锁权限,释放cpu资源并进入等待状态。

notify:表示持有对象锁的线程A准备释放对象锁权限,通知jvm唤醒某个竞争该对象锁的线程X。线程A synchronized 代码执行结束并且释放了锁之后,线程X直接获得对象锁权限,其他竞争线程继续等待(即使线程X同步完毕,释放对象锁,其他竞争线程仍然等待,直至有新的notify ,notifyAll被调用)。

notifyAll:notifyall和notify的区别在于,notifyAll会唤醒所有竞争同一个对象锁的所有线程,当已经获得锁的线程A释放锁之后,所有被唤醒的线程都有可能获得对象锁权限

需要注意的是:三个方法都必须在synchronized 同步关键字所限定的作用域中调用,否则会报错java.lang.IllegalMonitorStateException ,意思是因为没有同步,所以线程对对象锁的状态是不确定的,不能调用这些方法。

另外,通过同步机制来确保线程从wait方法返回时能够感知到感知到notify线程对变量做出的修改

wait/notify/notifyall 基本概念相关推荐

  1. concurrent: wai notify notifyAll

    转载自:http://sishuok.com/forum/blogPost/list/3674.html 通常,多线程之间需要协调工作.例如,浏览器的一个显示图片的线程displayThread想要执 ...

  2. JAVA线程间协作:wait.notify.notifyAll

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  3. Java多线程之wait(),notify(),notifyAll()

    在多线程的情况下,因为同一进程的多个线程共享同一片存储空间,在带来方便的同一时候,也带来了訪问冲突这个严重的问题.Java语言提供了专门机制以解决这样的冲突,有效避免了同一个数据对象被多个线程同一时候 ...

  4. 终于搞懂了sleep/wait/notify/notifyAll

    作者:acupt,专注Java,架构师社区合伙人! sleep/wait/notify/notifyAll分别有什么作用?它们的区别是什么?wait时为什么要放在循环里而不能直接用if? 简介 首先对 ...

  5. [转]java 为什么wait(),notify(),notifyAll()必须在同步方法/代码块中调用?

    在 Java中,所有对象都能够被作为"监视器monitor"--指一个拥有一个独占锁,一个入口队列和一个等待队列的实体entity. 所有对象的非同步 方法都能够在任意时刻被任意线 ...

  6. sleep() wait() notify/notifyAll() 的区别

    看了一下线程这方面的知识,也结合了一些 面试的题 总结如下: 一些基础的就不说了,主要说一下这里面的几个方法,也是object的通用方法. sleep()     wait()     notify/ ...

  7. wait/notify/notifyAll在Object类中

    wait/notify/notifyAll在Object类中 因为我们在使用synchronized锁 对象锁可以是任意对象,所以wait/notify/notifyAll需要放在Object类中. ...

  8. 线程的状态转换、sleep()、wait()、yeild()、终止线程的方法、线程之间的协作(join()、wait() notify() notifyAll()、await() signal() )

    1.线程的状态转换 1.1 新建(New) 创建后尚未启动 1.2 可运行(Runnable) 可能正在运行,也可能正在等待 CPU 时间片. 包含了操作系统线程状态中的 Running 和 Read ...

  9. java多线程notifyall_Java多线程:线程状态以及wait(), notify(), notifyAll()

    1. wait(), notify(), notifyAll()等方法介绍 在Object.java中,定义了wait(), notify()和notifyAll()等接口.wait()的作用是让当前 ...

最新文章

  1. shell case
  2. 序列化在反序列化时无法加载程序集的问题
  3. 基于Centos7构建Kubernetes平台
  4. 高中计算机老师要教什么条件,应聘高中教师,到底需要什么学历?很多人都不知道!...
  5. 多元经验模态分解_环境激励桥梁模态参数识别—环境激励模态参数识别概述
  6. JDK synchronized的实现细节
  7. C++ stringstream介绍,使用方法与例子
  8. Android studio 清除缓存数据的步骤
  9. 新手课堂之汽车灯光操作及位置
  10. C#实现在同一窗口内显示多个其它窗口/另一个窗口
  11. SSAS的MDX中的计算成员和命名集
  12. 模拟电子技术基础》期中考试试题,仅供参考
  13. linux如何部署btsync同步?
  14. 第一个游戏外挂,附上详细制作过程
  15. java.lang.ClassNotFoundException(通俗易懂)
  16. SIM900A通过基站定位
  17. 优化AWS使用成本系列之预留实例(RI)为您提供大幅折扣
  18. 转: 云计算openstack—云计算、大数据、人工智能
  19. vue2 使用 Export2Excel.js 前端导出数据为 excel 文件记录
  20. Java人事与工资管理系统的设计

热门文章

  1. 小菜的CLR之旅(1)
  2. Java程序员面试时要注意的一些问题
  3. ORACLE和MYSQL函数
  4. tomcat错误:The page you tried to access (/manager/login.do) does not exist
  5. Git 添加到Git 仓库
  6. BASH Shell 简易进度条小函数
  7. py2exe使用相对路径的当前目录问题
  8. Winform字体统一方案
  9. 【Hibernate】Hibernate基本原理及概念详解
  10. I/O流(四)—java如何添加到文件尾