概述


当线程B访问某个共享资源时,想获取资源的锁对象,发现这个锁已经被线程A拿到了,这个时候,线程B只能被挂起,等待线程A释放锁。

但是拿到锁的线程A在执行的过程中,因为某些条件还不满足,暂时不想继续执行下去,想先等待一下(注意:是已经拿到锁的线程A自己想主动等待的),希望等到某个条件满足后,继续执行任务。在同步代码块里,线程A必须先释放锁,线程B才有资格获取锁,进入同步代码块,执行代码。等线程B执行完后,线程A需要的条件已经满足,那么这个时候必须有一个通知机制,让线程A从等待状态变成执行状态,继续执行代码。

有些同学认为线程A也可以一直循环判断,检查条件是否已经满足,而不一定要中断自己,然后等待。其实这种也是一种思路,但是呢?比较耗CPU,而且也不知道条件何时才能满足。

线程之间要协调沟通,必须有一个等待机制和通知机制,在JAVA里面,对应的就是wait方法和notify方法。


Object的wait方法


 synchronized (obj) {while (condition does not ok){obj.wait();}}

如果想让线程A处于等待状态,可以调用当前对象wait方法。wait方法一旦被调用,也就意味着:线程A已经获得锁了,而且能做的事情都已经做了,现在只能等待了,等待另外的同步操作执行某些代码后,我才回来继续干活。

注意:
wait方法是定义在根类Object上的,Thread继承自Object类,自然也有wait方法。但是这里并不是调用当前线程对象的wait方法,而是具有锁属性的当前对象的wait方法;这一点我也不太理解,我觉得要做到线程A切换到等待状态,之后被人唤醒,就算使用线程A的wait方法和notify方法其实也是可以做到的,但是估计实现起来非常麻烦。另外从场景上看,wait定义在Object也比较合理,表示线程挂在了对象的等待池中。

Object wait方法相关推荐

  1. java object finalize_Java Object finalize() 方法

    Object finalize() 方法用于实例被垃圾回收器回收的时触发的操作. 当 GC (垃圾回收器) 确定不存在对该对象的有更多引用时,对象的垃圾回收器就会调用这个方法. 语法 protecte ...

  2. JavaScript 复制对象与Object.assign方法无法实现深复制

    在JavaScript这门语言中,数据类型分为两大类:基本数据类型和复杂数据类型.基本数据类型包括Number.Boolean.String.Null.String.Symbol(ES6 新增),而复 ...

  3. [caffe]深度学习之CNN检测object detection方法摘要介绍

    [caffe]深度学习之CNN检测object detection方法摘要介绍  2015-08-17 17:44 3276人阅读 评论(1) 收藏 举报 一两年cnn在检测这块的发展突飞猛进,下面详 ...

  4. Object处理方法的返回值

    创建一个User实体类,并在其中写上属性值,并将其进行封装: public class User {private String name; private int age;public int ge ...

  5. Object.defineProperty方法

    Object.defineProperty() (一次添加/修改一个属性) 用法:Object.defineProperty(obj, prop, descriptor) 方法会直接在一个对象上定义一 ...

  6. Object.create()方法

    Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的proto. 语法:Object.create(proto, [propertiesObject]) - proto ...

  7. object取值_如何重写object虚方法

    在 C# 中 Object 是所有类的基类,所有的结构和类都直接或间接的派生自它.前面这段话可以说所有的 C# 开发人员都知道,但是我相信其中有一部分程序员并不清楚甚至不知道我们常用的 ToStrin ...

  8. java的object有show_Java中 Object的方法

    Java中 Object的方法 构造方法摘要 Object() 方法摘要 protected Object clone() 创建并返回此对象的一个副本. boolean equals(Object o ...

  9. Java Object.hashCode()方法

    Java Object.hashCode()方法 @(JAVA)[java] 更详细的内容可以参考<effective java>与<think in java> Object ...

  10. JavaScript Object.defineProperty()方法详解

    Object.defineProperty() 方法直接在一个对象上定义一个新属性,或者修改一个已经存在的属性,并返回这个对象.因此,又称为属性拦截器.在前端中,webpack以及vue的原理都应用了 ...

最新文章

  1. zabbix监控添加psql数据库和sql_server数据库模板
  2. Ubuntu下gedit的相关问题
  3. python 爬虫工具
  4. C++Primer:函数(参数传递:引用形参)
  5. leetcode 504. 七进制数(Java版)
  6. centos初始配置
  7. 性能测试之二——性能测试的流程
  8. 【RobotStudio学习笔记】(八)速度设置
  9. JAVA语法——选择排序
  10. orcad电路设计软件教程
  11. DAO层和Service层的究极理解--这波我在大气层
  12. 帆软报表参数传给网络报表_统计图表FineReport中程序数据集传参使用解决方案...
  13. buu [QCTF2018]Xman-RSA
  14. 好莱坞电影调色_好莱坞正式支持电影制作中的开源
  15. 用AI对抗AI!教代码调戏深度学习算法生成的假视频
  16. 解决抖音爱心动画实现
  17. 【资源分享】疫情居家一个月,精心整理了一个PPT资源社区(含模板-资源-高级技巧)
  18. java poi 实现生成ppt
  19. 篇章级的事件抽取——阅读笔记
  20. 医药 Gateway to Gateway EDI电子传输解决方案

热门文章

  1. weex-eros+vue Android拍照并预览图片踩坑【小白向】
  2. Kubesphere设置mysql的网络映射
  3. 乐淘签下国际知名厂商成最大网上玩具城
  4. 将1-9分成三组,组成三个三位数,构成1:2:3的比例
  5. Git可视化工具SourceTree使用手册:中英文/命令对照表
  6. ios使用AVCaptureVideoDataOutput实现连续拍照消除快门声音
  7. 主流机型分辨率尺寸汇总
  8. 鹤岗一中2021年高考成绩查询,2021年鹤岗高考状元名单公布,鹤岗高考状元学校资料及最高分...
  9. 服务器一体机电脑如何重装系统,一体机电脑,小编教你如何组装一体机
  10. 基于强化学习的质量AI在淘系互动业务的实践之路