Object wait方法
概述
当线程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方法相关推荐
- java object finalize_Java Object finalize() 方法
Object finalize() 方法用于实例被垃圾回收器回收的时触发的操作. 当 GC (垃圾回收器) 确定不存在对该对象的有更多引用时,对象的垃圾回收器就会调用这个方法. 语法 protecte ...
- JavaScript 复制对象与Object.assign方法无法实现深复制
在JavaScript这门语言中,数据类型分为两大类:基本数据类型和复杂数据类型.基本数据类型包括Number.Boolean.String.Null.String.Symbol(ES6 新增),而复 ...
- [caffe]深度学习之CNN检测object detection方法摘要介绍
[caffe]深度学习之CNN检测object detection方法摘要介绍 2015-08-17 17:44 3276人阅读 评论(1) 收藏 举报 一两年cnn在检测这块的发展突飞猛进,下面详 ...
- Object处理方法的返回值
创建一个User实体类,并在其中写上属性值,并将其进行封装: public class User {private String name; private int age;public int ge ...
- Object.defineProperty方法
Object.defineProperty() (一次添加/修改一个属性) 用法:Object.defineProperty(obj, prop, descriptor) 方法会直接在一个对象上定义一 ...
- Object.create()方法
Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的proto. 语法:Object.create(proto, [propertiesObject]) - proto ...
- object取值_如何重写object虚方法
在 C# 中 Object 是所有类的基类,所有的结构和类都直接或间接的派生自它.前面这段话可以说所有的 C# 开发人员都知道,但是我相信其中有一部分程序员并不清楚甚至不知道我们常用的 ToStrin ...
- java的object有show_Java中 Object的方法
Java中 Object的方法 构造方法摘要 Object() 方法摘要 protected Object clone() 创建并返回此对象的一个副本. boolean equals(Object o ...
- Java Object.hashCode()方法
Java Object.hashCode()方法 @(JAVA)[java] 更详细的内容可以参考<effective java>与<think in java> Object ...
- JavaScript Object.defineProperty()方法详解
Object.defineProperty() 方法直接在一个对象上定义一个新属性,或者修改一个已经存在的属性,并返回这个对象.因此,又称为属性拦截器.在前端中,webpack以及vue的原理都应用了 ...
最新文章
- zabbix监控添加psql数据库和sql_server数据库模板
- Ubuntu下gedit的相关问题
- python 爬虫工具
- C++Primer:函数(参数传递:引用形参)
- leetcode 504. 七进制数(Java版)
- centos初始配置
- 性能测试之二——性能测试的流程
- 【RobotStudio学习笔记】(八)速度设置
- JAVA语法——选择排序
- orcad电路设计软件教程
- DAO层和Service层的究极理解--这波我在大气层
- 帆软报表参数传给网络报表_统计图表FineReport中程序数据集传参使用解决方案...
- buu [QCTF2018]Xman-RSA
- 好莱坞电影调色_好莱坞正式支持电影制作中的开源
- 用AI对抗AI!教代码调戏深度学习算法生成的假视频
- 解决抖音爱心动画实现
- 【资源分享】疫情居家一个月,精心整理了一个PPT资源社区(含模板-资源-高级技巧)
- java poi 实现生成ppt
- 篇章级的事件抽取——阅读笔记
- 医药 Gateway to Gateway EDI电子传输解决方案
热门文章
- weex-eros+vue Android拍照并预览图片踩坑【小白向】
- Kubesphere设置mysql的网络映射
- 乐淘签下国际知名厂商成最大网上玩具城
- 将1-9分成三组,组成三个三位数,构成1:2:3的比例
- Git可视化工具SourceTree使用手册:中英文/命令对照表
- ios使用AVCaptureVideoDataOutput实现连续拍照消除快门声音
- 主流机型分辨率尺寸汇总
- 鹤岗一中2021年高考成绩查询,2021年鹤岗高考状元名单公布,鹤岗高考状元学校资料及最高分...
- 服务器一体机电脑如何重装系统,一体机电脑,小编教你如何组装一体机
- 基于强化学习的质量AI在淘系互动业务的实践之路