【Java基础知识】对Object类wait()和notify()方法的理解

news2024/10/1 23:48:56

wait()/notify()原理

  • 当前线程必须拥有此对象的monitor监视器(锁)。(不获取锁直接用Object对象调用wait和notify,会报错java.lang.IllegalMonitorStateException)
  • 当前线程调用wait() 方法,线程就会释放此锁的所有权,并等待。
  • 直到另一个线程通过notify()方法或notifyAll()方法通知在该对象的监视器(锁)上等待的线程唤醒。
  • 然后线程等待,直到它可以重新获得该对象的监视器(锁)的所有权,然后继续执行(被唤醒之后还需要等待直到获取锁才能继续执行)

wait和notify是object中的方法,就是等待和唤醒:

  1. 一个线程持有锁但是需要等待一些资源,那么就先进入等待队列。
  2. 其他线程可以先持有锁并执行同步代码块中的内容
  3. 等到带着资源的另一个线程抢占到锁,并唤醒等待线程,等待线程就重新进入到阻塞队列,如果当前无其他线程竞争,就可以直接抢占锁并执行。

原理分析

在这里插入图片描述

  • Owner线程发现条件不满足,调用wait()方法,即可进入WaitSet变为WAITING状态。
  • BLOCKED和WAITING的线程都处于阻塞状态,不占用CPU时间片。
  • BLOCKED线程会在Owner线程释放锁时唤醒。
  • WAITING线程会在Owner线程调用 notify() 或notifyAll()时唤醒,但唤醒后并不以为这立刻获得锁,人需进入EntryList重新竞争。

对上图进行举例说明:

  1. Thread-0先抢占了锁,Owner记录当前抢占锁的线程,因为Thread-0缺少了部分资源调用wait进行等待,进入等待队列。
  2. Thread-1同理.
  3. 当前阻塞队列EntryList中有Thread-3、Thread-4和Thread-5,持有锁的线程是Thread-2
  4. Thread-2中调用了notify就会随机唤醒一个线程,如果唤醒的线程并没有得到需要的资源,那么就会虚假唤醒。
  5. 因此多个线程等待,我们使用notifyAll,然后搭配while循环判断条件就是Thread-2带来的资源是否是等待线程需要的资源,不是就继续等待,是就进入到EntryList重新排队。

wait和sleep的区别和共同点

  • sleep方法属于Thread类, wait属于Object方法
  • sleep不用强制与synchronized使用,但wait和synchronized需要一起使用
  • sleep在睡眠时不会释放占用对象的锁,wait会释放,性能更高
  • 共同点:他们都有状态TIMED-WAITING

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

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

相关文章

动态库和静态库

文章目录感性认识库动态库和静态库从库的设计者来看库制作静态库制作动态库库的使用者的角度静态库的使用使用动态库1.把头文件和库文件拷贝到系统的路径下2.修改对应的环境变量更改文件 ld.so.conf.d在系统的库路径下建立对应的软链接动态库如何加载感性认识库 首先&#xff…

关于GNSS关键性能测试,应该如何选择?

现在,GPS/GNSS信号无处不在,而GNSS接收机芯片的低成本和高性能也让在不同设备中安装GNSS接收机变得更为容易。然而,与此同时又存在一个问题,如果想将这些接收器芯片集成到一个设备或系统中,该如何对其进行全面的GNSS测…

方法注解@Bean与对象注入

1.类注解是添加到某个类上的,⽽⽅法注解是放到某个⽅法上的,如以下代码的实现: 注:方法注解一定要搭配类注解使用,否则会报错 2.重命名Bean 多个重命名,使用多个名称获取的对象都是同一个 3.获取 Bean 对象…

全网惟一面向软件测试人员的Python基础教程-在Python中列表是什么?

全网惟一面向软件测试人员的Python基础教程 起点:《python软件测试实战宝典》介绍 第一章 为什么软件测试人员要学习Python 第二章 学Python之前要搞懂的道理 第三章 你知道Python代码是怎样运行的吗? 第四章 Python数据类型中有那些故事呢?…

TTL(RGB)接口液晶显示屏的调试方法

TTL接口的液晶显示屏一般会使用DE模式驱动它。首先需要CPU带有LCD控制器,能够产生出液晶显示屏所需要的以下几个信号: 1.时钟信号(DOTCLK) 2.行同步信号(HSYNC) 3.场同步信号(VSYNC) 4.DEN(数据允许信号) 6.数据信号(R0-R7;G0-G7;B0-B7)…

第02讲:Git分支操作

一、什么是分支 在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独 分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时 候,不会影响主线分支的运行。对于…

剑指 Offer 17. 打印从1到最大的n位数

题目 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。 思路 本题应该考虑的是大数问题,但是返回数组为int[]。。。所以两种方法都做一下 方法一:普通解法&#xff…

天翼云服务器性能评测,4H8G贵阳节点性能跑分

天翼云号称全球运营商云第一、中国公有云用户数第二、政务云公有云第一。那么天翼云服务器用起来到底怎么样呢? 目前,蓝队云这边一共有19个天翼云节点云服务器,覆盖全国多个核心省市及地区,节点选择的话一般就是按照就近原则。 …

权威报告出炉:2022年移动机器人出货量增长53%!2023年移动机器人迎来发展新拐点?

原创/文 BFT机器人 近日,全球权威研究机构Interact Analysis重磅发布移动机器人领域的“风向标”——《2022年移动机器人市场报告》(The Mobile Robot Market 2022),深入探究真实市场数据,对全球移动机器人领域的发展现…

当压力传感器遇到汽车电子系统 智芯传感打造车规级智能感知传感器产品

汽车电子系统是汽车数字化的发端和基础,更是汽车智能化的前提。近年来,伴随着汽车电子技术的快速发展与应用,汽车电子系统在车辆控制精度、范围、适应性和智能化等方面,都实现了大幅优化提升。而压力传感器作为汽车电子系统的主要…

RHCSA 第五天笔记

用户和组管理 用户分为三类: 超级用户 root 普通用户 只能切换到自己有的用户 系统用户(不常用,没办法登录) 组分为两类 定义概念 基本组(私有组) 没指定所属组,系统建立和用户同名的组 附加…

诺依文件上传支持阿里云oss

文章目录描述后端引入依赖application.yml 添加访问oss需要的参数编写oss工具类编写controller前端更改调用接口![在这里插入图片描述](https://img-blog.csdnimg.cn/efc28eb8244e4da482d46327ab29a999.png)去掉baseUrl回调成功后url改成真实urlmain.js中挂在该组件具体调用代码…

华为手表开发:GT3(1)配置调试设备

华为手表开发:GT3(1)配置调试设备初环境与设备获取手表UUID登录 AppGallery Connect 点击用户与访问初 希望能写一些简单的教程和案例分享给需要的人 环境与设备 系统:window 设备:HUAWEI WATCH 3 Pro 开发工具&…

自动化测试到底该怎么学?

从功能测试到自动化测试 ,待遇翻倍,我整理的超全学习指南! 首选你需要拥有一个全网最牛最全面的软件测试全职业生涯进阶从零基础到测试开发学习路线图。 其次跟着大纲的内容慢慢学习,当然配套的【教学视频配套的学习资料】肯定是…

代码随想录二刷day4 24.两两交换链表中的结点 19.删除链表的倒数第n个结点 链表相交(环形链表)

二刷复习 文章目录二刷复习24.两两交换链表中的结点19.删除链表的倒数第n个结点链表相交环形链表224.两两交换链表中的结点 思路还是挺简单的,在纸上画一个图就行了 思考的过程: 1.我会思考需要用一个指针curr还是两个指针prev和curr,思考的…

利用 Nacos 实现了一个动态化线程池,非常实用

在后台开发中,会经常用到线程池技术,对于线程池核心参数的配置很大程度上依靠经验。然而,由于系统运行过程中存在的不确定性,我们很难一劳永逸地规划一个合理的线程池参数。在对线程池配置参数进行调整时,一般需要对服…

SegeX Automation:VC调用Golden Surfer自动化失败(VC调用Automation失败)原因详解

----哆啦刘小洋 原创,转载需说明出处 2022-12-29 SegeX Automation:Surfer自动化(Automation)失败原因1 简介2 初始化Surfer对象不成功2.1 一般代码2.1 改进代码3 Windows系统原因4 Surfer原因5 其他问题1 简介 在工程领域,Golde…

国产无线耳机什么牌子好?国产真无线蓝牙耳机排行

随着近几年蓝牙耳机市场的快速发展,蓝牙耳机依旧占据着半个行业的份额,在人们的日常生活中出现的频率也越来越高。叫得上名的国产蓝牙耳机牌子也越来越多,那么,国产无线耳机什么牌子好?下面,我来给大家推荐…

无代码资讯 | Gartner 预测明年低代码市场规模;微软推出低代码学习平台;AWS 推出开发无服务器应用的低代码平台

栏目导读:无代码资讯栏目从全球视角出发,带您了解无代码相关最新资讯。 TOP3 大事件 1、Gartner 预测到 2023 年,全球低代码市场预计达到269亿美元 根据 Gartner 的最新预测,到 2023 年全球低代码开发技术市场规模预计将达到 269…

hnu计网实验三-应用层和传输层协议分析(PacketTracer)

前言:难度适中的一个实验 一、实验目的 通过本实验,熟悉PacketTracer的使用,学习在PacketTracer中仿真分析应用层和传输层协议,进一步加深对协议工作过程的理解。 二、实验内容 研究应用层和传输层协议 从 PC 使用 URL 捕获 W…