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

news2024/12/22 20:40:38

目录

🌟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.coloradmin.cn/o/494160.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ | 语句的基础知识(夯实基础)

本文概要 本篇文章主要介绍数据结构中C的语句内容,适合有零基础的同学,文中描述和代码示例很详细,干货满满,感兴趣的小伙伴快来一起学习吧! 🌟🌟🌟个人简介🌟&#x1f…

CentOS 7.x 安装 ZooKeeper 并实现集群搭建

0. 集群结构 服务器IPhostname节点说明192.168.31.101master主节点192.168.31.102slave1从节点192.168.31.103 slave2 从节点 下面的安装与配置操作需要在三台服务器上都执行一遍。 1. 安装JDK ZooKeeper要求运行在 JDK 环境上,JDK安装教程可参考 CentOS 7.x 安装…

从点赞到数字货币:揭秘Diem币与Facebook的联系

大家都知道Facebook是一个全球知名的社交媒体平台,但你是否听说过与Facebook有关的数字货币Diem币呢?或许你会想,从点赞到数字货币,这是怎么回事?别着急,让我们一起揭秘Diem币与Facebook的联系。 首先&…

IP一键呼叫语音对讲怎么样?

IP一键呼叫语音对讲怎么样? IP一键呼叫语音对讲,让您的生活更加便利和安全! 无需复杂设置,轻松实现远程通话,随时随地与家人朋友沟通交流。APP端可实时监控家庭动态,保证家庭安全。 一键呼叫语音功能&am…

微信小程序——自定义组件

自定义组件 一、组件的创建二、组件的引用1、全局引用2、局部引用 三、全局引用和局部引用 一、组件的创建 第一步:在项目的根目录下创建文件夹components。 第二步:在components文件夹下创建文件夹card。 第三步:选中文件夹card 右键 选中…

openwrt广告屏蔽大师修复补丁luci-app-adbyby plus + lite

openwrt广告屏蔽大师修复补丁 目前使用方式然而有规则无法下载的通病所以可以手工拷贝随便哪里来的规则最后提示 补丁位置 : 地址 http://pan.ezdial.cn/nasone/a 备用:https://bak.ezdial.cn:8000/bakone/a 因什么值得买,在反复审核本文&…

如何在 AlmaLinux 8 上安装和使用 Docker

Docker 是面向开发人员和系统管理员的强大平台,可简化在软件容器内部署应用程序的过程。 容器允许您将应用程序及其所有部分(代码、运行时、系统工具、系统库——通常位于 /usr/bin 或 /usr/lib 中的任何内容)打包,以便它可以在任何 Linux 机器上一致地运…

Linux性能参数调优

内核的shmall和shmmax参数 SHMMAX配置了最大的内存segment的大小:这个设置的比SGA_MAX_SIZE大比较好。 SHMMIN最小的内存segment的大小 SHMMNI整个系统的内存segment的总个数 SHMSEG每个进程可以使用的内存segment的最大个数 配置信号灯( semphore …

微软 New Bing, Chat AI 绘图火力全开

嗯,今天的主角是, Microsoft New Bing! 在 Edge 里面,访问 www.bing.com,登录 Microsoft 账户,点击 CHAT, 就可以体验 Bing Chatbot. 这次, New Bing 无需加入 waitlist, 即可全面体验 ChatGPT DALL-E 的绘图功能 关键…

1、防刷限流实现1

1、本章诉求 限流的需求出现在许多常见的场景中: 秒杀活动,有人使用软件恶意刷单抢货,需要限流防止机器参与活动某api被各式各样系统广泛调用,严重消耗网络、内存等资源,需要合理限流 2、流程设计 3、方案实现 3.1…

【致敬未来的攻城狮计划】— 连续打卡第二十二天:RA2E1的RTC时钟日历

系列文章目录 1.连续打卡第一天:提前对CPK_RA2E1是瑞萨RA系列开发板的初体验,了解一下 2.开发环境的选择和调试(从零开始,加油) 3.欲速则不达,今天是对RA2E1 基础知识的补充学习。 4.e2 studio 使用教程 5.…

XXL-JOB中间件【实现分布式任务调度】

目录 1:XXL-JOB介绍 2:搭建XXL-JOB 2.1:调度中心 2.2:执行器 2.3:执行任务 3:分片广播 1:XXL-JOB介绍 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学…

港科夜闻|广东省委常委、副省长王曦到访香港科技大学

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、广东省委常委、副省长王曦到访香港科技大学。在香港科大校长、粤港澳大湾区院士联盟理事会主席叶玉如教授陪同下,王曦常委率代表团参观国家级科研设施和了解学校发展情况,并与在港中国科学院院士座…

使用MASA全家桶从零开始搭建IoT平台(二)设备注册

前言 我们不希望任何设备都可以接入我们的IoT平台,所以一个设备正常的接入流程是这样的, 1、上位机软件通过串口或其他方式读取设备的唯一标识码UUID。 2、上位机调用IoT后台接口,发送UUID和ProductID。 3、后台接口判断设备是否注册过&…

【JavaEE进阶】——第五节.SpringMVC学习介绍(上)(获取参数,传递参数——关于前后端传参交互的总结、from表单、Ajax数据提交)

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:JavaEE进阶 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!! 目录 文章目…

车载红外夜视「升温」

红外夜视赛道,正在升温。 本周,全球车载后视镜头部供应商Gentex宣布,领投以色列热成像技术初创公司ADASKY,后者在B轮融资中拿到了3000万美元。按照计划,Gentex将协助ADASKY将红外夜视技术推向汽车市场。 事实上&#x…

基于3D网格模型的加密域可逆信息隐藏文献学习

————————————————————————————————————————————— 文献学习: 题目:Separable Reversible Data Hiding Based on Integer Mapping and MSB Prediction for Encrypted 3D Mesh Models. 作者:Na Xu…

系统分析师之需求工程(十四)

目录 一、概述 二、需求获取 三、需求分析 3.1 需求分类 3.2 结构化需求分析(SA) 3.3 面向对象的需求分析OOA 四、需求定义 五、需求验证 六、需求管理 6.1 软件需求基线 6.2 需求跟踪 6.3 需求风险管理 一、概述 软件需求是指用户对系统在功…

产品经理进阶:一份为创业者准备的商业模式作战指南(加餐)

目录 大环境 精益画布 专栏一:产品经理进阶指南 CSDN学院课程地址 课程目录 专栏二:华为流程体系课程 课程地址 课程目录 专栏三:华为BLM战略管理课 目录 大环境 今天来谈谈商业模式这个话题。 2023 年很快就要过半了&#xff0c…

堆(什么是堆以及怎样自己创建堆)

🎁**“我们不必非常聪明才能改变世界。我们只需要比绝大多数人更早地认识到问题,并付诸行动。”- 毛里茨萨克斯** 🏀作者:不能再留遗憾了 📱关于作者:博主正在学习C和Java,目前有些关于leetcode…