【JavaEE初阶】简单了解wait和notify方法~

news/2024/5/2 14:53:37/文章来源:https://blog.csdn.net/qq_48479056/article/details/130520505

目录

🌟1、wait()

🌟2、notify()


🌟1、wait()

        (1)wait()方法与notify()方法都是Object类中的方法。

        (2)wait()是让线程等待一段时间,死等——>状态WAITING:没有时间限制的等待.

        (3)wait(long) 是让线程等待一段时间,过时不候——>TIMED_WAITING:有时间限制的等待。

        wait()必须与关键字synchronized联合使用,否则会报错。

❓ 问题1:区分wait()与join()

        (1)wait()是Obejct类中的方法,join()是Thread类中的方法;

        (2) join()是让调用方去等待,wait()是让执行方去等待。


        🌰导师告诉班长,现在要去辅导员办公室取一份资料回来签字。班长过去了🧑,发现学院里所有的班长都来了,资料不过,现在还在打印中,让大家全部都等待一会。😫这个班长等待的过程其实就是执行方等待。等到所有的资料都打印完毕,辅导员这时候喊一声:所有的班长都过来,怎么就是notifyAll(),唤醒了所有的线程;如果是只喊了一个一班的班长来一下,那就是notify(),只唤醒了一个线程,其他的线程还在等待。等到班长终于拿好资料回去找导师的时候,导师在这期间等待的过程就是一个调用方等待。你理解了吗~😆


❓ 问题2:区分wait()与sleep()

        (1)wait与sleep是完全没有可比性的🤣一个是用于县城之间的通信,另一个是让线程阻塞等待的。不过都是可以让线程放弃执行一段时间;

        (2) wait()是Object类中的方法,sleep()是Thread类中定义的方法;

        (3) wait()必须要和synchronized关键字搭配使用,调用之后会释放锁;sleep()只是让线程进入休眠状态,和锁毫无关系。

🌟2、notify()

        notify(): 只唤醒等待中的一个线程,并直接参与锁竞争;

        notifyAll:() : 一次性唤醒等待中的所有线程,线程共同去参与锁竞争。

🌰  wait与notify必须是同一个锁对象,wait必须与synchronized搭配使用。 wait与notify被调用后,当前线程都会释放锁资源。

private static Object locker = new Object();public static void main(String[] args) {Thread t1 = new Thread(()->{while (true){System.out.println("t1在等待之前");try {synchronized (locker) {locker.wait();}} catch (InterruptedException e) {e.printStackTrace();}System.out.println("t1在等待之后");System.out.println("=============================");}});t1.start();Thread t2 = new Thread(()->{while (true){System.out.println("t2唤醒之前");//唤醒时也要使用同一个锁对象synchronized (locker) {locker.notify();}System.out.println("t2唤醒之后");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}});t2.start();}

控制台输出: 


        中午继续努力~ 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_296534.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 NutUI 搭建「自定义业务风格」的组件库 | 京东云技术团队

作者:京东零售 佟恩 本文介绍,如何使用 NutUI 组件库,搭建一套为专属业务风格的业务组件库。 NutUI 是一款京东风格的移动端组件库。NutUI 目前支持 Vue 和 React技术栈,支持Taro多端适配。 当下的实现方式 一般组件库&#xff…

【Python入门篇】——Python基础语法(标识符与运算符)

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: Python入门,本专栏主要内容为Python的基础语法,Python中的选择循环语句…

Unity 光照

\\\\\\\ Unity烘焙(Baking)是指将场景中的动态光照转换为静态贴图。在烘焙过程中,Unity会将场景中的光源、材质和对象等信息计算出来,并存储为贴图。当玩家进入场景时,Unity只需要读取这些预计算好的贴图或者数据文件&…

《创造》人生旅程

上个月读完的这本《创造》,发现作者是iPod的创造者,让我回想起我刚工作时买的iPod。iPod确是惊艳之作,那时我一个月挣1000元,竟毫不犹豫花了2000就买了,并一直伴随我直到进入智能手机时代。《创造》会写什么&#xff1…

VSCode作业1:猜数字游戏和简单计数器(包含完整代码)

目录 猜数字游戏 一、使用‘random’函数获取随机数 二、 分情况讨论输入值大小情况 三、HTML代码 四、CSS样式及运行效果 简单计数器(计时器) 一、使用‘setInterval’函数实现计数效果 二、使用’clearInterval‘函数实现暂停计数和重新计数效果 …

字符设备注册与注销

1、对于字符设备驱动而言,当驱动模块加载成功以后需要注册字符设备,同样,卸载驱动模 块的时候也需要注销掉字符设备。字符设备的注册和注销函数原型如下所示 static inline int register_chrdev(unsigned int major, const char *name,const…

Lucene和Solr和Elasticsearch区别,全文检索引擎工具包Lucene索引流程和搜索流程实操

文章目录 基本概念什么是全文检索技术全文检索的应用场景搜索引擎站内搜索(关注)文件系统的搜索 Lucene & solr & es介绍区别Solr与Lucene对比ES与Lucene的区别ES与Solr对比 Lucene实现全文检索的流程入门程序需求环境准备数据库脚本初始化Lucen…

arm 源码编译kernel 对比image zimage uimage vmlinux

一 源码编译kernel 下载交叉编译工具链 下载cc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz ,这是官网的。使用下面命令下载。 585 wget https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabihf/gcc-linaro-4.9…

揭秘镭速传输点对点传输技术,NAT+Raysync强强组合

点对点传输是一种文件即时传输方式用于实现数据的快速联动,为所有客户端提供资源,包括带宽、存储空间、计算能力。点对点传输技术有很多应用,包括共享各种格式音频、视频、数据等。 在5G重新定义带宽,信息技术不断发展的今天&…

对标世界一流|亚马逊供应链管理经验借鉴

当前电商零售行业竞争日趋激烈,服务标准的提升、产品价格的竞争力等因素,导致企业经营成本持续上升,供应链的管理水平已经成为零售行业成败的关键。然而在电商零售行业的红海竞争中,亚马逊却始终保持着高速增长的态势,…

【Python】贪吃蛇 —— 无聊必备的小项目

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,YOLO领域博主爱笑的男孩。擅长深度学习,活动,YOLO,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typecollect个人…

对标世界一流|弹性应对“供应链不确定性常态化” ——快消与重资产行业的经验互鉴

1963年,气象学家洛伦兹提出的“蝴蝶效应”表示:“一只蝴蝶在巴西扇动翅膀,有可能会在美国德克萨斯州引起一场龙卷风”。本文希望通过提供快消行业的先进实践,帮助重资产企业从“蝴蝶扇动翅膀”之前就开始行动,避免“龙…

如何裁剪图片大小尺寸?

如何裁剪图片大小尺寸?平时我们在工作或者学习的时候,会经常需要将图片上传到不同的网站或者平台上,然而上传的时候经常会受到尺寸的限制,有时候尺寸太大就需要变小,为了确保上传成功,我们需要将图片进行裁…

ChatGPT实现leetcode 刷题和变型

leetcode 刷题和变型 作为一个程序员,Leetcode 是一个非常重要的网站。它不仅可以帮助程序员提高算法和数据结构的能力,还能帮助我们准备技术面试。但是,刷 Leetcode 也需要花费大量的时间和精力来解决各种难题。那么,有没有什么…

【转存】Go语言设计模式

导语| 设计模式是针对软件设计中常见问题的工具箱,其中的工具就是各种经过实践验证的解决方案。即使你从未遇到过这些问题,了解模式仍然非常有用,因为它能指导你如何使用面向对象的设计原则来解决各种问题,提高开发效率&#xff0…

C++之正则表达式

目录 #include • .:换行符以外的任何字符 • […]:…字符中的任何一个 • [^…]:…字符之外的任何一个 • [[:charclass:]]:指定之字符类charclass中的一个 • \n, \t, \f, \r, \v:换行符,tab符号&#xf…

【算法】什么是离散化

作者:指针不指南吗 专栏:算法篇 🐾人类做题的过程,就是个暴搜的过程🐾 文章目录 1.引入2.思路3.模板题 1.引入 特指有序、整数的离散化。 离散化,本质上是一种哈希,它在保持原序列大小关系的前…

k8s基础4——deployment控制器、应用部署、升级、回滚、水平扩容缩容

文章目录 一、基本介绍二、应用程序生命周期2.1 部署应用2.2 应用升级2.2.1 修改YAML文件升级(交互式)2.2.2 命令指定镜像版本升级(免交互式)2.2.3 调用vim升级 2.3 滚动升级2.3.1 升级流程 2.4 应用回滚2.4.1 查看历史发布版本2.…

微服务---RabbitMQ进阶(消息可靠性,延迟队列,惰性队列,集群部署)

RabbitMQ进阶(消息可靠性,延迟队列,惰性队列,集群部署) 消息队列在使用过程中,面临着很多实际问题需要思考: 1.消息可靠性 消息从发送,到消费者接收,会经理多个过程: 其中的每一步都可能导致消息丢失,常见…

代码随想录算法训练营第三十二天 | 利润题、覆盖范围题

122.买卖股票的最佳时机II 文档讲解:代码随想录 (programmercarl.com) 视频讲解:贪心算法也能解决股票问题!LeetCode:122.买卖股票最佳时机II_哔哩哔哩_bilibili 状态:根本做不出来,思路太巧了。 思路 想获…