千家信息网

wait、notify、notifyAll有什么用

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要为大家展示了" wait、notify、notifyAll有什么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下" wait、notify、no
千家信息网最后更新 2025年01月19日wait、notify、notifyAll有什么用

这篇文章主要为大家展示了" wait、notify、notifyAll有什么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下" wait、notify、notifyAll有什么用"这篇文章吧。

一:wait、notify、notifyAll简单介绍


1. 为什么 wait、notify、notifyAll 不是线程对象Thread的方法

原因:首先应该明确wait、notify、notifyAll三个方法都是对锁对象的操作,而锁可以是任何对象。在java的世界中任何对象都属于Object类,因此这三个方法都是Object的方法, 而不是线程对象Thread的方法。

2. 使用方法需要注意两点:
a. 这三个方法必须在synchronized关键字包含的临界区(简单理解,就是代码块)内使用;

b. 使用方式为锁对象.方法(),比如obj.wait();


3. 什么时候加锁、什么时候释放锁?必须明确以下几点:

a. notify和notifyAll方法不会释放锁,这两个方法只是通知其他使用该锁当锁但是在wait状态的线程,可以准备抢锁了(注:这里还要格外注意一点,其他使用该锁当锁且处于wait状态的线程只有被notify或notifyAll唤醒了,才有资格抢锁)


b. 某个锁对象调用wait方法会立即释放当前线程的该对象锁 , 且其他线程通过

notify/notifyAll方法通知该线程可以抢该对象锁时,如果当前线程抢到了,会从当前锁的wait方法之后开始执行 - 即从哪里wait,从哪里执行;

c. 在synchronized、wait、notify、notifyAll的组合里加锁的方式只有一个即进入同步代码块时加锁;


释放锁的方式有两个: ①锁对象调用wait方法时会释放锁 ;② 走完同步代码块时自动释放锁


4. notify、notifyAll的区别
a. 某个锁对象的notify只会唤醒一个使用该锁当锁且处于wait状态的线程;
b. 某个锁对象的notifyAll方法会把所有使用该锁当锁且处于wait状态的线程都唤醒;
使用建议: 为了防止某些线程无法被通知到,建议都使用notifyAll。

以上是" wait、notify、notifyAll有什么用"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

方法 对象 线程 状态 三个 代码 内容 方式 篇文章 a. 两个 只有 建议 时候 b. 同步 学习 帮助 世界 使用方法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 校园网络安全解决方法 数据库表关联 例子 中国联通网络技术研究院杨健剑 达梦数据库端口号配置在哪个文件 管家进销存数据库 怎样检测数据库中有没有这条消息 吕梁软件开发服务价格 软件开发技术的优势 肇庆商城软件开发哪家好 郑州高新区天健湖网络安全周 如何用c做一个数据库 尼尔森零售研究数据库 在酒店电脑使用网络安全码 某单位人事管理系统数据库技术 初中校园网络安全知识资料 互联网络科技 软件开发流程流程图是什么模型 网络安全法 首席安全官 卧龙区委网络安全 长沙会务无纸化软件开发 上海宏云软件开发官网 西南大学数据库技术大作业 网络安全部队党小组发言 网络安全工程师的意义 西藏土地资产管理软件开发公司 奉贤区led大屏服务器 网络安全系统高校 服务器系统还原软件 一个数据库至少有一个日志文件 软件开发专业课
0