wait()和notify()

news2024/9/30 3:33:40

线程的状态

状态是针对当前线程调度的情况来描述的,也可以认为线程是调度的基本单位,在Java中对线程的状态进行了细化,主要分为下面几种状态


★ 1.NEW  创建了Thread对象,但是还没有调用start


★ 2. TERMINATED  表示内核中的pcb已经执行完了,但是Thread对象还在.


★ 3. RUNNABLE  可运行状态,分为两种情况,一种是正在cpu上执行的,另外一种是在就绪队列里面,随时可以去CPU上执行的


★ 4.WAITING,TIMED_WAITING,BLOCKED 都是阻塞状态,都表示线程PCB正在阻塞队列里面.但触发条件不同,.WAITING是wait()方法触发的,TIMED_WAITING是sleep()方法触发的,BLOCKED是synchronized触发的.synchronized的相关操作在另外一篇博客里

synchronized的相关操作

wait()和notify()

线程最大的问题是抢占式执行,随机调度,但为了保证线程的安全,不希望随机调度,程序员就想出一些办法,控制现成的执行顺序,虽然线程在内核中的调度是随机的,但可以通过一些api让线程主动阻塞,主动放弃cpu.

比如有t1,t2两个线程,我们希望t1先执行一半,然后让t2执行,就可以让t2先wait(进入阻塞状态,主动放弃cpu),等t1执行执行一半的时候,在通过notify来通知t2,把t2唤醒,让t2开始执行

wait进行阻塞,某个线程调用wait方法(无论是那个对象),此时就会进入阻塞,此时就处于WAITING状态.

 用代码来看看wait的使用方法

运行结果

 此时抛出非法的锁状态异常,锁的状态就是被加锁的状态和被解锁的状态.

为什么胡出现这种异常呢,来看看wait的具体操作

1. 先释放锁

2. 进行阻塞等待

3. 收到通知后,重新尝试获取锁,并在获取锁后,继续往下执行

对上面代码进行修改,wait要先释放锁,就要先加锁,我们对上面代码进行加锁操作

运行结果

 此时代码阻塞在synchronized代码块里,实际上这里的阻塞是释放了锁,然后进行阻塞等待,此时就处于WAITING 状态,

此时就需要notify来进行通知,然后唤醒wait,同样,notify()和wait()一样,在使用之前要先释放锁.

在对上面代码进行改进

代码的执行结果

在wait()的无参数版本,只要t2不进行notify(),t1就会一直等待下去 

在java中wait()还有带参数的版本,可以指定等待的最大时间

 还有一个唤醒wait的方法,notifyAll(),此时,当多个线程wait的时候,notify是随机唤醒一个线程,而notifyAll()是唤醒所有线程,这些线程在一起竞争锁.

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

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

相关文章

初识微服务技术栈

认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构,这些架构之间有怎样的差别呢? 导学: 了解微服务的优缺点;了解微服务架构的演变过程&am…

分布式任务调度(00)--Quartz

1 任务调度整体流程 2 组件 调度器 :工厂类创建Scheduler,根据触发器定义的时间规则调度任务任务:Job表示被调度的任务触发器:Trigger 定义调度时间的元素,按啥时间规则执行任务。一个Job可被多个Trigger关联&#xf…

ps人像怎么做渐隐的效果?

photoshop怎么制作人像渐隐的图片效果?渐隐效果需要使用渐变来实现,下面我们就来看看详细的教程。 首先,我们打开Photoshop,点击屏幕框选的【打开】,打开一张背景图片。 下面,我们点击左上角【文件】——【…

centos7安装jdk-阿里云服务器

1.背景 2.安装步骤 步骤:(特别注意:虚拟机安装的一般是32位的操作系统,jdk也必须使用32位的) 查看虚拟机版本:sudo uname --m i686 //表示是32位 x86_64 // 表示是64位 查看是否已经安装jdk 看看 是否设置了jdk环境变量: echo $JAVA_HOME; 或运行命令: …

文件换行符导致linux里运行python文件找不到文件

现象 运行python代码的时候: 报错信息: : No such file or directoryon3 解决方法 在pycharm中把文件的分隔符给改了 这样,把文件的分隔符改成Unix and macOS就可以了

移远EC600U-CN开发板 day01

1.官方文档快速上手,安装驱动,下载QPYcom QuecPython 快速入门 - QuecPython (quectel.com)https://python.quectel.com/doc/Getting_started/zh/index.html 注意: (1)打开开发板步骤 成功打开之后就可以连接开发板…

起重机远程监控解决方案

起重机远程监控方案 门式起重机作为大型吊装设备,具有机器体积大、作业范围广、组合工况多等特点。在实际生产与吊装过程中,由于场地环境复杂、各类材料和结构件随处可见,在门式起重机作业中极易出现起重机构过载、吊装物品碰撞等问题。 一、…

Web服务器实战

网站需求 1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个网站目录分别显示学生信息,教学资料和缴费网站,基于www.openlab.com/student 网站访问学生信息,www.openlab.com/data网站访问教学资料 www…

DDD领域模式的模块层级及其依赖关系

DDD领域模型设计是一种常用的软件设计模式,它强调将业务逻辑和数据模型放在最核心的位置,以便更好地满足业务需求。在DDD领域模型设计中,应用程序被分为四个层次:用户界面层、应用服务层、领域模型层和基础设施层。 层次 用户界面层(Presentation Layer) 作为用户和应…

思维训练4

题目描述1 Problem - A - Codeforces 题目分析 对于此题我们要求差值种类最大,故我们可以构造出相邻差值分别为1,2,3...由于n规定了最大的范围故我们增到一定的差值之后其差值必定为之前出现过的数字,但由于要保证数组呈递增趋势…

java项目之线上教学平台(springboot框架)

项目简介 线上教学平台实现了以下功能: 管理员:首页、个人中心、学员管理、资料类型管理、学习资料管理、交流论坛、我的收藏管理、试卷管理、留言板管理、试题管理、系统管理、考试管理。学员:首页、个人中心、我的收藏管理、留言板管理、…

优思学院|APQP(先期产品质量规划)简介

在汽车行业,APQP Advanced Product Quality Planning(先期产品质量规划),是一种常用的质量规划指南和工具,但它同样适用于其他行业。APQP是汽车国际行动组织(AIAG)提出的一种方法,用…

百数低代码与AI:实现业务智能化的新途径

今年6月,咨询机构麦肯锡发布了的一份题为《生成式人工智能的经济潜力》的研究报告,在报告中,分析师们通过对47个国家及地区的850种职业(全球80%以上劳动人口)的研究,探讨了在AI成指数级发展背后&#xff0c…

【云原生】使用nginx反向代理后台多服务器

背景 随着业务发展, 用户访问量激增,单台服务器已经无法满足现有的访问压力,研究后需要将后台服务从原来的单台升级为多台服务器,那么原来的访问方式无法满足,所以引入nginx来代理多台服务器,统一请求入口…

在idea命令行,or linux 终端执行命令,快速获取通过脚本上证指数、创业板实时行情

脚本编写 编写shell脚本如下,并保存命名为stock curl http://hq.sinajs.cn/list=s_sh000001 -H User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0 -H Accept: */* -H Accept-Language: en-US,en;q=0.5 --compressed -H Referer…

SIEM 体系结构的组件

安全信息和事件管理(SIEM)软件可帮助 IT 安全专业人员保护其企业网络免受网络攻击,SIEM 解决方案从组织中的所有基础结构组件收集日志数据,为安全专业人员提供实时数据和对网络活动的见解。 网络的内部视图可以帮助您识别和预防威…

热像仪:使用 ESP32 和 MLX90640 传感器设计您自己的红外成像设备

本文详细介绍如何设计一款基于ESP32的热成像仪,文末包含完整的原理图,PCB,3D文件,程序源码的免费下载链接 使用 ESP32 和 MLX90640 传感器 DIY 热像仪 热像仪广泛应用于各种工业应用,例如热性能监控、检测温度异常、热基准测试等。我们甚至将热成像用于国防和军事应用。我…

Python教程:Pandas删除数据的4种情况

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 开始之前,pandas中DataFrame删除对象可能存在几种情况 1、删除具体列 2、删除具体行 3、删除包含某些数值的行或者列 4、删除包含某些字符、文字的行或者列…

2023-11-07 android 编译的时候出现 unused variable ‘temp0‘ [-Werror,-Wunused-variable]

一、android 编译的时候出现 unused variable temp0 [-Werror,-Wunused-variable] 二、解决方法:在android.mk里面添加 LOCAL_CFLAGS -Wno-unused-parameter -Wno-unused-variable 三、解释 -Woption 让编译器给出option指定的编译警告,常用的一些如…

CSS实现文本左右对齐

因为文本里面有中午符号,英文,英文符号等,导致设置宽度以后右侧凌乱,可以通过以下代码设置样式,让文本工整对齐。 让我们看一下设置前和设置后的对比图片: 效果图如下:(左边是设置…